2012-02-23 14 views
2

以下は、Entity Framework Modelのセクションです。私は、多くの "AssetHolding"レコードに関連する "ヘッダ"テーブルを持っていることに気付くでしょう。それ自体は継承(TpH)を使用する3つのタイプのいずれかになります。 はすべて3種類が同一に見える継承されたという事実を無視してください - このデータを編集する場合、これは意図的あるIncludeメソッドを使用してEntityFramework内の関連オブジェクトをロードする

Entity model

を、私は1つのIDによって特定のヘッダー、およびすべての関連AssetHoldingsを引っ張っする必要があります。これを行う方法は、次のようになります。

public AssetValuationHeader GetValuationHeaderById(int id) 
{ 
    return this.AssetValuationHeaders 
     .Include("AssetHoldings") 
     .Where(vh => vh.Id == id) 
     .FirstOrDefault(); 
} 

これは、上記の画像の赤い枠線で強調表示されたものすべてを正しく読み込みます。

私は上記の画像で緑色の境界線で強調表示されたビットをロードする必要があります。私はでもが必要です。ご覧のとおり、これは3つの継承テーブルのうちの1つに関連しています。

私はこれを試してみました:

public AssetValuationHeader GetValuationHeaderById(int id) 
{ 
    return this.AssetValuationHeaders 
     .Include("AssetHoldings") 
     .Include("AssetHoldings.SwapAssetHoldingNotionals") 
     .Where(vh => vh.Id == id) 
     .FirstOrDefault(); 
} 

は、指定したパスが有効ではありません含めます。 EntityType 'CoreValuationModel.AssetHolding'は、名前が 'SwapAssetHoldingNotionals'のナビゲーション プロパティを宣言しません。

これはIncludeメソッドを使用しても可能ですか? (つまり、LazyLoadingを使用しないで)そうでない場合の回避策はありますか?

+0

エンティティの継承のために動作しません。 http://stackoverflow.com/questions/944332/entity-framework-inheritance-and-includeを参照してください。 – ken2k

答えて

1

ジェイミー、

[スポイラー] - これは完全なメモリから符号化され、実際にすべてのコンパイルされないことがあり!

とにかく、私はいくつかのレベルが深いグラフをロードするために持っていた状況があって、次の線に沿って何かをやって覚えているようだしました:

public AssetValuationHeader GetValuationHeaderById(int id) 
{ 
    return this.AssetValuationHeaders 
     .Include("AssetHoldings") 
     .Include("AssetHoldings").Select(sa => sa.SwapAssetHoldingNotionals) 
     .Where(vh => vh.Id == id) 
     .FirstOrDefault(); 
} 

か:

public AssetValuationHeader GetValuationHeaderById(int id) 
{ 
    return this.AssetValuationHeaders 
     .Include("AssetHoldings") 
     .Include("AssetHoldings").Include("SwapAssetHoldingNotionals") 
     .Where(vh => vh.Id == id) 
     .FirstOrDefault(); 
} 

私が言ったように、メッセンジャーを撃たないでください(私の電話からこれを後でチェックします)

関連する問題