Entity framework core 如何将ASP.NET样板文件角色实体Id从int更改为long
我需要添加一个新的party实体(表)。此实体遵循参与方设计模式,其中用户、组织单元和角色实体Id是主键,也是链接到参与方实体主键的外键。我能够用用户实体和组织实体实现这一点,但不能用角色实体,因为角色Id是int EF core抱怨角色表的主键类型与参与方表主键不匹配 以下是代码示例:Entity framework core 如何将ASP.NET样板文件角色实体Id从int更改为long,entity-framework-core,aspnetboilerplate,asp.net-boilerplate,Entity Framework Core,Aspnetboilerplate,Asp.net Boilerplate,我需要添加一个新的party实体(表)。此实体遵循参与方设计模式,其中用户、组织单元和角色实体Id是主键,也是链接到参与方实体主键的外键。我能够用用户实体和组织实体实现这一点,但不能用角色实体,因为角色Id是int EF core抱怨角色表的主键类型与参与方表主键不匹配 以下是代码示例: [Serializable] [Table("MdParties")] public class Party : FullAuditedEntity<long>, IMayHaveTenant {
[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");
});
[可序列化]
[表(“缔约方”)]
公共类派对:全场,IMAYHAVENTANT
{
public int?TenantId{get;set;}
}
公共部分类用户
{
[必填项,外键(一方名称))]
公共重写长Id{get;set;}//PK和FK指向参与方
公共虚拟参与方{get;set;}
}
公共类OrganizationUnitExt:OrganizationUnit
{
[必填项,外键(一方名称))]
公共重写长Id{get;set;}//PK和FK指向参与方
公共虚拟参与方{get;set;}
}
公共部分类角色:AbpRole
{
[必填项,外键(一方名称))]
公共重写int-Id{get;set;}//PK和FK指向参与方
公共虚拟参与方{get;set;}
}
modelBuilder.Entity(b=>
{
b、 HasIndex(e=>new{e.UserName});
b、 哈松(d=>d党)
.有很多
.HasForeignKey(d=>d.Id)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName(“FK_AbpUsers_PartyId”);
});
modelBuilder.Entity(Entity=>
{
entity.HasOne(d=>d.Party)
.有很多
.HasForeignKey(d=>d.Id)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName(“FK组织单位”);
});
在不重建标准Abp包的情况下,无法更改RoleId类型。令人遗憾的是,它就是这样设计的。不过,您可以绕过此问题,使用RoleId添加其他表,并在modelbuilder中使其成为唯一的租户表。这将不是真正严格的SQL实现,因为您将获得一对多关系,但其行为将根据您的喜好而定。请不要在多个位置发布。为什么不让PartyFullAuditedEntity
?因为组织单元和用户实体主键很长