我开始学习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创建复合表?