0

人とその友達を管理するためのモデルを考え出そうとしています。

  • 人には0対多の友達がいます
  • 友達も人です-同じではありませんが
  • 友達は1つ以上のグループに所属できます

大まかに言って、スキーマは次のようになります。

ここに画像の説明を入力してください

EFコードファーストで同じことを達成する方法がわかりません。これは私がこれまでに持っているものですが、これは必要なスキーマを作成しません

public class Person 
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public virtual ICollection<Person> Friends { get; set; } // is this right?
}

public class Friend {
    public long Id { get; set; }
    public long PersonId { get; set; }  // Person whose Friend this guy is
    public virtual ICollection<Group> Groups { get; set; } 

    // other fields 
}

public class Group{
    public long Id { get; set; }
    public string Name { get; set; }
}

誰かが私がこの混乱を理解するのを手伝ってくれる?

4

1 に答える 1

3

Person現在のモデルでは各人が多くの友達を持つことができますが、同時に各人は他の1人としか友達になれないため、自己参照の多対多の関係が必要です。

これを試して:

public class Person 
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public virtual ICollection<Person> FriendWith { get; set; } 
    public virtual ICollection<Person> FriendOf { get; set; } 
}

そして、この流暢なAPIマッピングを追加できます。

modelBuilder.Entity<Person>()
            .HasMany(p => p.FriendWith)
            .WithMany(p => p.FriendOf)
            .Map(m => {
                 m.MapLeftKey("PersonId");
                 m.MapRightKey("FriendId");
                 m.ToTable("PersonFriends");
            });

奇妙に思えるかもしれませんが、EFの関連付けは有向グラフを作成します=>人物Aが人物Bと友達である場合、それは異なる関係と見なされます。人物Bが人物Aと友達である場合、これらの関係の1つがFriendWith収集されます。もう1つはFriendOfコレクションになります。

于 2012-10-05T06:33:18.610 に答える