实体框架填充所有已加载实体的关系

时间:2015-08-31 23:13:18

标签: .net entity-framework entity-framework-4

我认为这在伪代码中更容易看到,但如果你想看到真正的交易,请告诉我。我有几个感兴趣的表:

Document - {Id(int), TypeId(int)}
DocumentType - {Id(int)}

EF为我生成了一些模型:

Document - {Id(int), TypeId(int), Type(DocumentType)}
DocumentType - {Id(int), Documents(ICollection<Document>)}

我认为这点看起来还不错。 DocumentType可能不需要集合,但有时候这种相同的架构很有用。

现在我打算打个电话,假设我们有一些丰富的人口数据:

context.Documents.Include(“Type”)。Where(x =&gt; x.Id&lt; 3):

Document:{id:1, type:{id:1, documents:null}}
Document:{id:2, type:{id:4, documents:null}}

看起来很好。现在我再打一次电话。

context.Documents.Include(“Type”)。Where(x =&gt; x.Id&lt; 4):

Document:{id:1, type:{id:1, documents:[{id:1, type:{id:1, documents:*}},{id:2, type:{id:4, documents:*}},{id:3, type:{id:1, documents:*}}]}}
Document:{id:2, type:{id:4, documents:[{id:1, type:{id:1, documents:*}},{id:2, type:{id:4, documents:*}},{id:3, type:{id:1, documents:*}}]}}
Document:{id:3, type:{id:1, documents:[{id:1, type:{id:1, documents:*}},{id:2, type:{id:4, documents:*}},{id:3, type:{id:1, documents:*}}]}}

其中'*'表示模型属性的无限递归。仅当嵌入式集合包含一个对象时,才会发生此递归,该对象也在模型或检索到的模型数组中的任何位置正确加载。 (在这个示例中,第三个条目的类型与第一个条目匹配。)这对我来说感觉就像EF正在做的缓存相关,但是希望有人对为什么会这样做有一些输入。

(EF4,数据库优先 - 通过edmx生成模型)

谢谢!

0 个答案:

没有答案