【问题标题】:Eager Loading on tracked items?渴望加载跟踪的项目?
【发布时间】:2009-11-29 21:53:22
【问题描述】:
我有一个绑定到实体(联系人)的元素,该实体公开了一些导航属性。
我希望,在某些操作(即“加载孩子”按钮)上,联系人应该为其所有孩子和孙子加载,就像我可以在执行之前使用 ObjectQuery.Include 一样;示例(伪):
DirectCast(element.DataContext, Contact).SubContacts. _
Include("Address.State"). _
Load()
我希望能够通过像上面的示例重新加载项目来调整结果,而不仅仅是在查询模型本身时。
我认为这在某种程度上应该是实体框架的一部分。
【问题讨论】:
标签:
entity-framework
entity-relationship
eager-loading
navigation-properties
【解决方案1】:
我不确定我是否遵循了这个问题,但让我检查一下:
您想要获取一个已经加载的实体,然后加载一个导航属性包含该属性的路径。这实际上并不难,只要您使用与加载第一个对象相同的上下文即可。
重要的一点是,每当您执行返回实体的查询时,Entity Framework 都会自动将它与您已经拥有的任何相关对象链接起来。所以你真正想要的是生成一个返回额外数据的新查询,其中包含一些。
Entity Framework 中的每个引用都有一个名为CreateSourceQuery 的方法。它返回一个对象查询,因此您可以使用它来执行此操作(抱歉,C#):
AlreadyLoadedContact.SubContacts.CreateSourceQuery().Include("Address.State").ToList();
ToList 调用执行查询,Entity Framework 将获取所有结果并自动将它们添加到您的 SubContacts EntityCollection。