从两个具有相同“键”列名称的表中创建组合键

时间:2018-07-06 16:03:48

标签: entity-framework-core ef-core-2.0

我开始学习EF核心,但在此之间迷路了。
我正在尝试创建多对多映射表来存储AccountUser及其Role。 Bothe表具有名为BaseEntity的基类,该基类具有要生成的公共列。

请参见下面的代码

基础实体类

public abstract class BaseEntity
{
    public int Id { get; set; }
}  

帐户用户类别

public class AccountUser : BaseEntity
{
    private ICollection<AccountUserRole> _roles;
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<AccountUserRole> Roles
    {
        get { return this._roles ?? (_roles = new List<AccountUserRole>()); }
        protected set { _roles = value; }
    }
}  

角色类别

public class Role : BaseEntity
{
    public string Name { get; set; }
    public string Description { get; set; }
}  

这是映射表类

public class AccountUserRole
{
    public int AccountUserId { get; set; }
    public AccountUser AccountUser { get; set; }
    public int RoleId { get; set; }
    public Role Role { get; set; }
}  

这就是我配置映射表的方式

public class AccountUserRolesConfiguration : IEntityTypeConfiguration<AccountUserRole>
{
    public void Configure(EntityTypeBuilder<AccountUserRole> builder)
    {
        builder.ToTable(nameof(AccountUserRole));
        builder.HasKey(aur => new { aur.AccountUserId, aur.RoleId });
        builder.HasOne(aur => aur.AccountUser)
            .WithMany(aur => aur.Roles)//Allows navigation from Account User to Roles
            .HasForeignKey(aur => aur.AccountUserId);
        builder.HasOne(aur => aur.Role).WithMany().HasForeignKey(aur => aur.RoleId);//No navigation from Roles to Account User - One way
    }
}

运行add-migrations时,EF内核抛出一条错误消息The entity type 'AccountUserRoles' requires a primary key to be defined

观察:似乎EF核心希望在Composite键中引用的列名成为它们各自表的主键
我尝试删除基类,并添加了与复合键中引用的主键名称匹配的主键名称,但幸运的是,它开始起作用。

是否可以在不同的表中使用相同的主键列名称,然后将它们引用回映射表中,从而使用流畅的API创建复合表?

0 个答案:

没有答案