在Entity Framework中创建多对多的联结表

时间:2014-04-28 15:02:36

标签: c# sql entity-framework

我试图在我的两个实体之间添加多对多的关系。我需要一个带有附加字段的联结表,我知道这意味着EF不能自动执行此操作,并且我需要为联结表创建实体。

我有以下型号

public class Supplier
{
    public int Id { get; set;}
    public virtual ICollection<SupplierUsers> UserPermissions { get; set; } 
}

public class User
{
    public string Id { get; set;}
    public virtual ICollection<SupplierUsers> UserPermissions { get; set; } 
}

我需要用户在联结表中存储权限。所以我创建了以下实体

public class SupplierUsers
{
    public string UserId { get; set; }
    public int SupplierId { get; set; }
    public SupplierUserPermission Permission { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual User User { get; set; } 
}

在我的OnModelCreating中,我还添加了以下内容(这可能是我出错的地方)

modelBuilder.Entity<SupplierUsers>()
    .HasKey(x => new { x.UserId, x.SupplierId });

这在某种程度上有效,我可以成功地为此表添加用户/供应商/权限。

但是我无法多次向该表添加相同的用户/供应商(可能是由于PK?)。

如何更改我的代码,以便我可以在此表中多次添加相同的用户或供应商?

此处的表结构目前是什么样的:

Current junction table structure

谢谢。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你想向SupplierUsers添加多对等的UserId和SupplierId,对吗?

将SupplierUsersId字段添加到您的SupplierUsers实体并将其设为主键。

public class SupplierUsers
{
    public int SupplierUsersId { get;set; }
    public string UserId { get; set; }
    public int SupplierId { get; set; }
    public SupplierUserPermission Permission { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual User User { get; set; } 
}

从OnModelCreating()

中删除配置