0

エンティティのナビゲーション プロパティを読み込む必要があります。Entity Framework (6.0) でナビゲーション プロパティを読み込む方法に関するさまざまなアプローチに関する素晴らしい記事を読んでいます。

明示的にロードする 2 つ目の方法は、EntityCollection または EntityReference からではなく、ObjectContext からです。Entity Framework の POCO サポートに依存している場合、ナビゲーション プロパティは EntityCollections または EntityReferences にならないため、Load メソッドはありません。代わりに、ObjectContext.LoadProperty メソッドを使用できます。LoadProperty はジェネリックを使用して読み込み元の型を識別し、ラムダ式を使用して読み込むナビゲーション プロパティを指定します。LoadProperty を使用して特定の person インスタンスの Pet を取得する例を次に示します。

context.LoadProperty<Family>(familyInstance, f => f.Pets)

今私が知る必要がある唯一のこと:

ObjectContext への参照を取得するにはどうすればよいですか?

DbContextそれから派生しているようには見えず、それへの参照も保持していません。はLoadProperty<T>静的ではないため、オブジェクト参照が必要です。

4

1 に答える 1

1

関連するコレクションを DbContext でロードする方法は 2 つあります。

1 つはあなたが尋ねたオプションですが、私がしばらくの間使用していて、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();
}
于 2013-03-02T13:08:08.367 に答える