如何使EF代码首先加载“ICollection”属性,当调用DBSet <t> .Find(id)</t>时

时间:2012-09-19 06:58:26

标签: c# .net entity-framework

当我在搜索“DbSet<T>.Where(predicate)这样的”列表“时,我可以添加.Include("xxx"),但这不适用于单个对象。

在调用virtual

时,我无法弄清楚如何制作EF加载Icollection<T> DbSet<T>.Find(id)属性

1 个答案:

答案 0 :(得分:5)

使用当前的API,您无法使用Find方法进行急切加载:

来自P erformance Considerations for Entity Framework 5

  

使用Find方法时需要考虑的是:

     

...

     

另外,请记住查找仅返回您正在查找的实体   for,它不会自动加载其关联实体 if   它们尚未存在于对象缓存中。如果你需要检索   关联实体,您可以按键使用急切加载查询。

所以你最接近的就是使用SingleOrDefault

查询
dbSet.Include("xxx").SingleOrDefault(i => i.Id == id)

或者您可以在查找后明确load the related entities

using (var context = new Db())
{
    var entity = context.SomeSet.Find(id);

    context.Entry(entity).Collection(p => p.SomeCollection).Load();
}