0

サンプルコードがあります:

public class Tag
{
    public int TagId { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class User
{
    public int UserId { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
}

モデルに対してEFを実行すると(コードファーストアプローチを使用)、データベースにいくつかのテーブルが自動的に作成されます。

Users
Tags
UserTagUsers <-- junction table for many-to-many relationship

ユーザーエンティティにもう1つのプロパティを追加することを決定するまでは、問題ありません。

public class User
{
    public int UserId { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
    public virtual ICollection<Tag> Tags2 { get; set; }
}

この場合、EFは完全に異なる関係を生成し、UserTagUsersジャンクションテーブルを削除しますが、1対1のマッピングにするためにTagsテーブルにいくつかの追加のプロパティを追加します。

プロパティTagsとTags2を多対多にするようにEFに明示的に指示するにはどうすればよいですか?

4

1 に答える 1

1

流暢なAPIを使用してマッピングを構成します

    modelBuilder.Entity<User>()
    .HasMany(u => u.Tags).WithMany(t => t.Users)
    .Map(m =>
    {
        m.ToTable("UserTags");
        m.MapLeftKey("UserId");
        m.MapRightKey("TagId");
    });

    modelBuilder.Entity<User>()
    .HasMany(u => u.Tags2).WithMany(t => t.Users2)
    .Map(m =>
    {
        m.ToTable("UserTags2");
        m.MapLeftKey("UserId");
        m.MapRightKey("TagId");
    });
于 2012-07-16T10:38:49.373 に答える