2012-04-02 9 views
0

エンティティフレームワーク(EF4)の外部キーに関する質問があります。Entity Frameworkを使用してネストされた外部キー属性を取得する方法

私はクラス考えてみましょう:それぞれ

public class E1 
{ 
    public int Id{get;set;} 
    Public string name{get;set;} 
} 
public class E2 
{ 
    [ForeignKey("e1")] 
    public int E1Id{get;set;} 

    [ForeignKey("E1Id")] 
    public E1 e1{get;set;} 

} 
public class E3 
{ 
    [ForeignKey("e2")] 
    public int E2Id{get;set;} 

    [ForeignKey("E2Id")] 
    public E2 e2{get;set;} 
} 
public class E4 
{ 
} 

をし、私は(内部E2を呼び出す)E3のオブジェクトを介して呼び出すだけでなく、E2としてE1を呼び出すことによってclass E4class E1の属性にアクセスするとします私がE1の属性にアクセスしようとするとobject null reference例外がスローされるので、E1の属性を取得する方法は?

答えて

1

あなたの関係を強制的に読み込むには、熱心な読み込み、遅延読み込み、明示的読み込みが必要です。

あなたがメインのエンティティをロードする際に積極的なロードはすぐにあなたの関係をロードします:あなたがそれらを最初にアクセスしたとき

var e4 = context.E4Set.Include(e => e.E3.E2.E1).First(...); 

レイジーローディングは、(それがすべてのアクセスナビゲーションのための別々のデータベースクエリをトリガするオンデマンドで透過的にあなたの関係をロードしますプロパティ)。この作業を行うには、遅延ロードをサポートするすべてのエンティティのすべてのナビゲーションプロパティがvirtualである必要があります。

明示的なロードは手動ですでにロードされたエンティティのロードを実行するために要求:

var e4 = context.EF4Set.First(...); 
var entry = context.Entry(e4); 
entry.Reference(e => e3).Load(); 

を、あなたは熱心なロードとそれを組み合わせることができます。

entry.Reference(e => e3).Query().Include(e => e.E2.E1).Load(); 
関連する問題