9

EF4 Code-First CTP3で多対多の関係をどのように表現しますか?

たとえば、次のクラスがある場合:

class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Profile> Profiles { get; set; }
}

class Profile
{
    public int Id { get; set; }
    public string Name { get; set; }
}

データベースには、ユーザー用のFKとプロファイル用のFKを持つUserProfilesテーブルがあります。どうすればこれをマッピングできますか?

ICollection<User>編集:私は現在、にプロパティを持ってマップする方法を理解していますProfileが、「ユーザーは多くのプロファイルを持っている」はずのときに反対のナビゲーションプロパティを持ちたくありません。

4

2 に答える 2

8

編集:CTP4は昨日遅く(2010年7月14日)にリリースされ、現在これがサポートされています:

modelBuilder.Entity<Post>().HasMany(p => p.Tags).WithMany();


私はついにこれが現在不可能であることに気づきました。Microsoftは、この機能の追加を検討しています(1つのナビゲーションプロパティのみ)。

詳細については、MSDNフォーラムの次のリンクを参照してください:http ://social.msdn.microsoft.com/Forums/en/adonetefx/thread/6920db2b-88c7-4bea-ac89-4809882cff8f

于 2010-07-14T14:34:03.897 に答える
5

多対多の関係では、両側にナビゲーションプロパティを含め、それらを仮想化する必要があります(遅延読み込みを利用するため)

class User
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Profile> Profiles { get; set; }
}

class Profile
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<User> Users { get; set; }
}

次に、その設定を使用して、多対多の関係を定義できます(エンティティフレームワークにそれを行わせることもできますが、使用する命名規則は好きではありません)。

        modelBuilder.Entity<Profile>().
            HasMany(p => p.Users).
            WithMany(g => g.Profiles).
            Map(t => t.MapLeftKey("ProfileID")
                .MapRightKey("UserID")
                .ToTable("UserProfiles"));

これにより、UserIDとProfileIDをキーとして持つUserProfilesという名前のテーブルが作成されます。

于 2011-05-13T15:46:20.247 に答える