我需要加载实体的导航属性。我正在阅读great article有关如何使用Entity Framework(6.0)加载导航属性的不同方法。
显式加载的第二种方法是来自ObjectContext 而不是来自EntityCollection或EntityReference。如果你依赖 实体框架中的POCO支持,您的导航属性不会 是EntityCollections或EntityReferences,因此不会有 加载方法。相反,您可以使用ObjectContext.LoadProperty 方法。 LoadProperty使用泛型来识别您的类型 从中加载然后使用lambda表达式来指定哪个导航 要加载的属性。这是使用LoadProperty检索的示例 特定人物的宠物:
context.LoadProperty<Family>(familyInstance, f => f.Pets)
现在我唯一需要知道的事情是:
如何获取对ObjectContext的引用?
DbContext
似乎并非源自它,也没有引用它。 LoadProperty<T>
不是静态的,所以我需要一个对象引用。
答案 0 :(得分:1)
我知道有两种方法可以使用DbContext加载相关集合。
一个是你问的选项,但是我现在已经使用了另一种方法,并且不需要引用ObjectContext。此方法适用于DbEntityEntry集合。这是一个例子:
public void Load<TEntity, TElement>(
TEntity entity,
Expression<Func<TEntity, ICollection<TElement>>> relation)
where TEntity : AbstractEntity, new()
where TElement : AbstractEntity, new()
{
var x = _context.Entry(entity);
if (!x.State.Is(EntityState.Detached) && !x.State.Is(EntityState.Added))
x.Collection(relation).Load();
}
或
public void Load<TEntity, TElement>(
TEntity entity,
Expression<Func<TEntity, TElement>> relation)
where TEntity : AbstractEntity, new()
where TElement : AbstractEntity, new()
{
var x = _context.Entry(entity);
if (!x.State.Is(EntityState.Detached) && !x.State.Is(EntityState.Added))
x.Reference(relation).Load();
}