当我搜索这样的“列表”时, DbSet<T>.Where(predicate)
我可以添加.Include("xxx")
,但这不适用于单个对象。
调用时我不知道如何使 EF 加载virtual
Icollection<T>
属性DbSet<T>.Find(id)
当我搜索这样的“列表”时, DbSet<T>.Where(predicate)
我可以添加.Include("xxx")
,但这不适用于单个对象。
调用时我不知道如何使 EF 加载virtual
Icollection<T>
属性DbSet<T>.Find(id)
使用当前的 API,您无法使用Find方法进行预加载:
使用 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();
}