首先获取ObjectContext EF代码的引用

时间:2013-03-02 11:47:57

标签: entity-framework ef-code-first

我需要加载实体的导航属性。我正在阅读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>不是静态的,所以我需要一个对象引用。

1 个答案:

答案 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();
}