我试图在我的两个实体之间添加多对多的关系。我需要一个带有附加字段的联结表,我知道这意味着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?)。
如何更改我的代码,以便我可以在此表中多次添加相同的用户或供应商?
此处的表结构目前是什么样的:
谢谢。
答案 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()
中删除配置