0

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

私のクラスは次のようになります。

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 になります。それぞれのコレクションを復元するにはどうすればよいですか? クラスに特定のタイプのコレクションが 1 つしかない場合は、次のようにすることができます。

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

リレーションシップがデータベース スキーマ (Destination_DestinationId1 および Destination_DestinationId2) で維持されていることがわかりますが、それらにアクセスできないようです。任意の提案をいただければ幸いです。

4

1 に答える 1

1

インクルード(あなたが発見したように)(宛先が取得されると同時にデータベースから関連データをロードする)を使用することに加えて、事後に宿泊施設を取得することもできます。したがって、目的地を照会してから宿泊施設が必要な場合は、それが可能です1つの方法は、明示的ロードと呼ばれ、Loadメソッドを使用します。もう1つは遅延読み込みです。これには、クラスを特定の方法で設定する必要があり、Lodgingsプロパティに言及するだけで、データベースへの呼び出しがトリガーされてクラスが取得されます。

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

hth

ジュリー

于 2012-04-21T01:30:17.463 に答える