c# - 在 Entity Framework 中创建多对多联结表

标签 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

谢谢。

最佳答案

如果我没理解错的话,您想将多对相等的 UserId 和 SupplierId 添加到 SupplierUsers,对吧?

将 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() 中删除配置

关于c# - 在 Entity Framework 中创建多对多联结表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344528/

相关文章:

c# - Winforms 托管 Javascript 内容

c# - 带参数的通用 Windows 平台命令

c# - 在 linux 终端上运行 C# 代码

mysql - 如何根据条件更新多列?

mysql - 从表中选择 count(col), max(col), column_name_data

c# - 如何最好地手动处理 Entity Framework 代码优先模型类的现有数据库列映射?

c# - 使用其关系中的属性为子类建模的正确方法

c# - 批处理文件 - 注册所有 Dll

c# - 使用 EF6 为 CRUD 操作实现通用服务

sql - 选择具有最大值的记录