【发布时间】:2020-02-23 10:16:39
【问题描述】:
我需要添加一个新的派对实体(表格)。该实体遵循党派设计模式,其中用户、组织单位和角色实体 ID 是主键,也是链接到党派实体主键的外键。我能够使用用户实体和组织实体而不是角色实体来实现这一点,因为角色 Id 是 int。
EF 核心抱怨角色表的主键类型与方表主键不匹配。
以下是代码示例:
[Serializable]
[Table("MdParties")]
public class Party : FullAuditedEntity<long>, IMayHaveTenant
{
public int? TenantId { get; set; }
}
public partial class User
{
[Required, ForeignKey(nameof(Party))]
public override long Id { get; set; } // PK and FK pointing to Party
public virtual Party Party { get; set; }
}
public class OrganizationUnitExt : OrganizationUnit
{
[Required, ForeignKey(nameof(Party))]
public override long Id { get; set; } // PK and FK pointing to Party
public virtual Party Party { get; set; }
}
public partial class Role : AbpRole<User>
{
[Required, ForeignKey(nameof(Party))]
public override int Id { get; set; } // PK and FK pointing to Party
public virtual Party Party { get; set; }
}
modelBuilder.Entity<User>(b =>
{
b.HasIndex(e => new { e.UserName });
b.HasOne(d => d.Party)
.WithMany()
.HasForeignKey(d => d.Id)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_AbpUsers_PartyId");
});
modelBuilder.Entity<OrganizationUnitExt>(entity =>
{
entity.HasOne(d => d.Party)
.WithMany()
.HasForeignKey(d => d.Id)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_AbpOrganizationUnits_PartyId");
});
【问题讨论】:
-
请不要在多个地方发帖。 aspnetboilerplate/aspnetboilerplate#5324
-
为什么不直接创建派对
FullAuditedEntity<int>? -
因为组织单位和用户实体的主键很长
标签: entity-framework-core aspnetboilerplate asp.net-boilerplate