【问题标题】:Creating many to many junction table in Entity Framework在实体框架中创建多对多联结表
【发布时间】:2014-04-29 01:50:24
【问题描述】:

我正在尝试在我的两个实体之间添加多对多关系。我需要一个带有附加字段的联结表,我知道这意味着 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 的原因?)。

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

目前的表结构如下所示:

谢谢。

【问题讨论】:

    标签: c# sql entity-framework


    【解决方案1】:

    如果我理解正确,您想向 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() 中移除配置

    【讨论】:

    • 我确定我通过在 SupplierUsers 类中设置 [Key] 进行了尝试,但我一定没有注释掉与之相关的 OnModelCreating() 代码。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多