2

EF4.1CTP5とSQLServer2008を使用しています。再通貨の問題を解決する方法を理解する必要があります。次の2つのクラスがあります。

public class Nation   
{
    public int ID {get; set;}
    public string name {get;set;}
    public List<NationAlly> NationAllies {get;set;}
}

public class NationAlly
{
    public int ID {get; set;}
    public int level {get;set;}
    public Nation Owner {get; set;}
    public Nation toNation {get;set;}
}

エンティティは、2つのテーブル(NationsとNationAllies)を使用してデータベースにマップされます。その上、2つの関係があります。1)NationAllies.OwnerIDからNation.IDへ2)NationAllies.ToNationIDからNation.IDへ

データベースからNationタイプのオブジェクトを取得しようとすると、DbContextクラスNationDBにアクセスします。

Nation selectedNation = ((nationDB.Nations.Include("NationAllies")).Where(m => m.name == "France")).FirstOrDefault();

問題は、NationAlliesのリストを持つselectedNationオブジェクトを取得することですが、リスト内のすべてのNationAllyにはフィールドtoNation=nullがあります。まず、フィールドtoNationにデータベースから正しい情報を取得してもらいたいと思います。どうすればよいですか?

そしてもちろん、toNationは他のNationAlliesと接続され、他のNationAlliesは他のNationを持ちます。どうすれば再帰マップを作成できますか?私の考えは、特定の方法でデータベースにクエリを実行することにより、特定のレベルまでマップをナビゲートすることです。そうすることで、優れた速度性能を実現するための最良のアプローチは何でしょうか?

4

1 に答える 1

2

NationAllies は、追加のプロパティを持つジャンクション テーブルのようです。問題は、ネストされたナビゲーション プロパティをメソッドで明示的に指定しないと、EF がこれらのプロパティを熱心に読み込まないことですInclude。toNationを埋めたい場合は、使用する必要があります

nationDB.Nations.Include("NationAllies.toNation")

また

nationDB.Nations.Include(n => n.NationAllies.Select(na => na.toNation))

遅延読み込みを有効にすることもできます。すべてのナビゲーション プロパティvirtual( toNationNationOwnerおよびNationAllies) を作成します。コンテキストを閉じない限り、最初にアクセスしたときにすべてのプロパティが読み込まれます。

于 2011-03-26T16:38:19.317 に答える