2012-04-19 5 views
0

私はEntity Framework Code Firstを使用しています。私が作成しようとしているクラスには、(同じタイプの)2つのコレクションが含まれています。私はそれぞれのコレクションを回復することに問題があります。Entity Frameworkコードファースト - 同じタイプのコレクションを復元する

私のクラスは次のようになります。私は新しいデスティネーションを作成し

public class Destination 
{ 
    public int DestinationId { get; set; } 
    public string Name { get; set; } 
    public List<Lodging> Lodgings { get; set; }   
    public List<Lodging> Lodgings2 { get; set; } 
} 
public class Lodging 
{ 
    public int LodgingId { get; set; } 
    public string Name { get; set; } 
    public Destination Destination { get; set; } 
} 

、私は(閉じ&が開かれた)データベース接続をリニューアルオープン。送り先を取得すると、私のコレクション(dest.Lodgingsおよびdest.Lodgings2)はnullになります。それぞれのコレクションを復元するにはどうすればよいですか?私のクラスは、特定のタイプの一つのコレクションを持っている場合、私は次のことを行うことができます:

var lodgings = context.Lodgings.Where(l => l.Destination.DestinationId == destId).ToList(); 

を私は関係がデータベーススキーマ(Destination_DestinationId1とDestination_DestinationId2)で維持されていることがわかりますが、私はしていないようですそれらに行くことができる。 何か提案がありがとうございます。

+0

は、私は自分の質問のためのソリューションを見つけました。 "インクルード"は仕事をします。ありがとう。 var dest = context.Destinations.Include( "Lodgings")。インクルード( "Lodgings2")。ToArray(); – user1342718

答えて

1

Include(あなたが発見したように)(目的地が取得されるのと同時にdbから関連データをロードする)を使用することに加えて、事実の後に宿題を取得することもできます。あなたが目的地とを照会するならば、あなたは宿舎を望む、それは可能です。 1つの方法は、Loadメソッドを使用する明示的ロードと呼ばれます。もう1つはレイジーローディングです。クラスを特別な方法で設定する必要があります。ちょうどというLodgingsプロパティのという名前がデータベースの呼び出しをトリガーします。

DbContextと関連データをロードするさまざまな方法についてEfのチームのブログに大きなブログの記事があります:http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

HTH

ジュリー

+0

Julieの情報ありがとうございました。それはとても役に立ちました。それは専門家から聞くことは素晴らしいことです。 Entity Framework Code Firstに関するあなたの本は素晴らしいです。私はそれがなければ私が得た限りでは得られなかった。再度、感謝します! – user1342718

関連する問題