3

Dunnoこれを正しく指定する方法。私はm:n関係に2つのエンティティを持っています:メンバとロール。EFコード関連の最初のエンティティコンテキストが失敗します

public class Role 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 

    public ICollection<Member> MembersInRole { get; set; } 
} 

public class Member 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 

    public ICollection<Role> Roles { get; set; } 
} 

私はいくつかのシード・データ作られています
http://i56.tinypic.com/2vjvj1w.png

をし、テストを書いた:
http://i54.tinypic.com/112916b.png

問題は私のメンバーの実体も、割り当てられた役割を持っていないということであり、私が文脈で作成したとき(あなたが画像で見ることができるように)。私は何が間違っているのか分からない。データベースのテーブルは大丈夫です。コンテキストインスタンスに問題がないかどうかはわかりません。しかし、私は常にシードデータを扱っているので、これは大丈夫です。

答えて

2

は、明示的にそれらを含めることで役割をロードする熱心に試してみてください。

Member admin = db.Members.Include("Roles").FirstOrDefault(m => m.Name == "Admin"); 
+0

ありがとうございます、それは実用的な解決策です。 – Damb

9

あなたMembersRoleRolesナビゲーションプロパティはそうEFは遅延読み込みのためにクレタ島のプロキシできない仮想的ではありません。そのため、ナビゲーションプロパティを読み込むよう明示的にEFに依頼する必要があります。プロパティをバーチャルとしてマークする:

public class Role 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 

    public virtual ICollection<Member> MembersInRole { get; set; } 
} 

public class Member 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 
} 

または@Yakimychアプローチを使用してください。 EF 4.1での熱意的な読み込みは、ラムダでも定義できます。

Member admin = db.Members.Include(m => m.Roles) 
         .FirstOrDefault(m => m.Name == "Admin"); 
+0

+1ありがとうございます。私は愚かで、実際にこれを忘れてしまった。 – Damb

関連する問題