2

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

调用时我不知道如何使 EF 加载virtual Icollection<T>属性DbSet<T>.Find(id)

4

1 回答 1

5

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

来自Entity Framework 5 的性能注意事项

使用 Find 方法时必须考虑的是:

...

此外,请记住Find 仅返回您正在查找的实体,并且如果它们尚未在对象缓存中,它不会自动加载其关联实体。如果您需要检索关联的实体,您可以使用带有预加载的按键查询。

所以最接近的是你能得到的是查询,例如使用SingleOrDefault

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

或者您可以在查找后显式加载相关实体

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

    context.Entry(entity).Collection(p => p.SomeCollection).Load();
}
于 2012-09-19T07:08:03.213 回答