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

没关系,直到我决定向 User 实体再添加一个属性:

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

在这种情况下,EF 生成完全不同的关系,它删除了 UserTagUsers 联结表,但向 Tags 表添加了一些额外的属性,以便使其一对一映射。

如何明确告诉 EF 使属性 Tags 和 Tags2 成为多对多?

4

1 回答 1

1

使用 fluent 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 回答