【发布时间】:2016-12-25 10:46:37
【问题描述】:
我在两个实体之间建立了多对多关系:类别 项目
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 序列化为 JSON 时会导致以下错误;
A circular reference was detected while serializing an object of type 'GoGreen.Data.Entities.SubCategoryMaster'.
由于我在属性级别禁用了延迟加载,我不希望它在任何时间点加载所有嵌套实体(循环引用)。有没有办法加载所有相关的一级记录,即类别和相关项目。
Related question - 但 Iod 不想采用建议的两种方式中的任何一种。
注意:我更想知道为什么 EF 会这样。对我来说这似乎是一个错误。
【问题讨论】:
-
检查答案并告诉我这是否对您有帮助。
-
你应该用 Json.Net 替换 json 序列化器并设置引用循环处理。
标签: json asp.net-mvc entity-framework lazy-loading eager-loading