gpt4 book ai didi

json - EF - 如何防止急切加载以加载所有嵌套实体

转载 作者:行者123 更新时间:2023-12-02 04:37:07 27 4
gpt4 key购买 nike

我有两个实体之间的多对多关系:类别 <--> 项目

public class CategoryMaster
{
[Key]
public int Id { get; set; }
public string Name { get; set; }

public virtual List<SubCategoryMaster> SubCategories { get; set; }

public List<ItemMaster> Items { get; set; }
}

public class ItemMaster
{
public long Id { get; set; }
public string Name { get; set; }

public List<CategoryMaster> Categories { get; set; }
}

每当我尝试将相关项目显式加载到所有/某些类别时,它都会给我
  • 所有相关项目
  • 与这些项目相关的类别
  • 与这些类别相关的项目等等......嵌套/循环引用
       db.CategoryMaster
    .Include(x=>x.Items)
    .Include(x=>x.SubCategories.Select(y=>y.Items))
    .ToList();

  • 因此,在使用 Json.Encode() 将其序列化为 *.cshtml 上的 JSON 时会导致以下错误;
    A circular reference was detected while serializing an object of type 'GoGreen.Data.Entities.SubCategoryMaster'.

    由于我在属性级别禁用了延迟加载,因此我不希望它在任何时间点加载所有嵌套实体(循环引用)。有没有办法加载所有相关的一级记录,即类别和相关项目。

    Related question - 但是 Iodon 不想采用建议的两种方式中的任何一种。

    注意 :我更想知道为什么 EF 会这样。这对我来说似乎是一个错误。

    最佳答案

    第一种方法:您可以在您不想使用 [ScriptIgnore] 将其排除在序列化之外的属性上方添加属性,如果您的实体是自动生成的,您可以创建分部类并添加您的自定义

    第二种方法:在 View 中创建一个仅包含您需要的属性的模型,并仅选择此模型并设置您的属性

    EFcontext.Tabel.include(x=>x...).Select(x=>new MyModel { ... });

    关于json - EF - 如何防止急切加载以加载所有嵌套实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41320469/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com