我遇到的问题是我的实体上的导航属性正在自动加载。
我有一个具有以下属性的类View
public string ParentUUID{get;set;}
public View Parent{get;set;}
public List<View> Children{get;set;}
然后我在我的模型制作者中
this.HasOptional(it => it.Parent).WithMany(it => it.Children).HasForeignKey(it => it.ParentUUID);
当我打电话
db.Views.ToList();
它正在加载每个视图的父节点和子节点而没有我特别包含它 - 我知道这可能与视图已经存在于集合中的事实有关,所以它们会被附加 - 但我需要阻止这种情况发生,因为我需要在没有循环引用的情况下序列化视图
任何指针都会受到极大的欢迎。
欢呼声,
答案 0 :(得分:0)
您需要将导航属性声明为virtual
才能获得延迟加载。
public string ParentUUID{get;set;}
public virtual View Parent{get;set;}
public virtual List<View> Children{get;set;}
当EF水合数据时,它使用的是从您的类派生的代理,它会在首次访问时影响导航属性的延迟加载。请注意,您必须在用于初始加载实体的DbContext范围内执行该访问。如果该DbContext关闭,您将获得异常。
修改强>
如果你根本不想加载它们,那么在属性本身上使用NotMappedAttribute
保持它们不被映射:
public string ParentUUID{get;set;}
[NotMapped]
public View Parent{get;set;}
[NotMapped]
public List<View> Children{get;set;}
...或使用Ignore()
流畅的模型配置方法:
...
this.Ignore(e => e.Parent);
this.Ignore(e => e.Children);