EF - 如何防止渴望加载来加载所有嵌套实体
问题描述:
我已经manay一对多的两个实体之间的关系:分类< - >产品EF - 如何防止渴望加载来加载所有嵌套实体
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; }
}
每当我试着明确的负载相关项目所有/某些类别,它给了我
- 所有相关项目
- 相关类别对这些项目
-
相关的项目对那些CA tegories等等...嵌套/循环引用
db.CategoryMaster .Include(x=>x.Items) .Include(x=>x.SubCategories.Select(y=>y.Items)) .ToList();
因此导致下面的错误,同时它序列化到JSON与Json.Encode * .cshtml();
A circular reference was detected while serializing an object of type 'GoGreen.Data.Entities.SubCategoryMaster'.
,因为我已经禁用延迟加载在性能水平,我不希望它在任何时间点装载所有嵌套实体(循环引用)。有没有办法加载所有相关的一级记录,即类别和相关项目。
Related question - 但Iodon't不想去任何建议的两种方式。
注意:我更感兴趣知道为什么EF的行为如此。这对我来说似乎是一个错误。
答
第一种方法:你可以添加属性上述属性,你不想使用[ScriptIgnore]
正在连载排除它,你可以创建部分类,并添加您的自定义,如果你的实体是自动生成的
第二种方法:创建只有性能的型号,你在你的观点需要,并仅选择这个模型,并设置你的属性
EFcontext.Tabel.include(x=>x...).Select(x=>new MyModel { ... });
+0
这种方法没有什么问题,但我不希望这样做,因为我期待EF框架本身的一些修复。 – RollerCosta
答
一个解决办法,请不要杀我:-)后加载对象和序列化之前,只需设置加载导致对的循环引用的对象。我尝试了它,并像魅力一样工作。
检查答案,并告诉我,如果这有助于你。 –
你应该用Json.Net替换json序列化器并设置参考循环处理。 –