实体框架6意外的自动加载导航属性

时间:2014-05-21 20:01:48

标签: c# entity-framework entity-framework-6

我遇到的问题是我的实体上的导航属性正在自动加载。

我有一个具有以下属性的类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();

它正在加载每个视图的父节点和子节点而没有我特别包含它 - 我知道这可能与视图已经存在于集合中的事实有关,所以它们会被附加 - 但我需要阻止这种情况发生,因为我需要在没有循环引用的情况下序列化视图

任何指针都会受到极大的欢迎。

欢呼声,

1 个答案:

答案 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);