2012-03-09 21 views
7

エンティティユーザーがあります。各ユーザーには多くの友人と教師がいるはずです。 EFコードでは、まず自分が望むものを達成する方法を少し混乱させています。私は自己参照の例を見ましたが、多対多ではありませんでした。エンティティフレームワークの多対多自己参照

public class Employee 
{ 
    #region Properties 

    public int EmployeeID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public int? ManagerID { get; set; } 
    public Employee Manager { get; set; } 

    #endregion 
} 

とModelBuilderの:たとえば、このBと友人がある場合(フレンドがある私の場合、自己参照を持つエンティティを作成する方法

modelBuilder.Entity<Employee>(). 
     HasOptional(e => e.Manager). 
     WithMany(). 
     HasForeignKey(m => m.ManagerID); 

は、Bであることを意味しますaとの友人)と教師(もしaがbの先生であれば、bはaの学生です)?

似たスレッドが既に存在する場合は申し訳ありません。 何か助けていただければ幸いです。

+0

これはどうですか? http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-ef-4-1-building-many-to-many-relationship.aspx –

+0

この例では、多対多で、自己参照なしでは非常に簡単で、modelBuilderを必要としません。とにかく助けてくれてありがとう。 – Unknown

答えて

10

多くの人がこれに答えたので)、私はもう少し調べて、私の場合の解決策を見つけました。エンティティは次のようになります。

public class User 
{ 
    public int ID { get; set; } 
    public string UserName { get; set; } 

    public virtual ICollection<User> Friends { get; set; } 
} 

のModelBuilder:

modelBuilder.Entity<User>() 
       .HasMany(x => x.Friends) 
       .WithMany(); 

そして最後に、私はヘルパーメソッドは仲良くして作られた、あなたが誰かと友達になったとき、彼はあなたと友達になっていることを確認してくださいBecomeTeacherStudent、(と教師 - 生徒のためのそれぞれのもの)。

+0

これはおそらく、あなたに奇妙なテーブル名とキー名を与えるでしょう。それに対処する方法の詳細については、http://msdn.microsoft.com/en-us/data/jj591620.aspxを参照してください。 – bbodenmiller

+0

これを 'DataAnnotations'で設定する方法はありますか? – Shimmy

関連する問題