我认为这在伪代码中更容易看到,但如果你想看到真正的交易,请告诉我。我有几个感兴趣的表:
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生成模型)
谢谢!