Entity framework core 如何将ASP.NET样板文件角色实体Id从int更改为long

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 {

我需要添加一个新的party实体(表)。此实体遵循参与方设计模式,其中用户、组织单元和角色实体Id是主键,也是链接到参与方实体主键的外键。我能够用用户实体和组织实体实现这一点,但不能用角色实体,因为角色Id是int

EF core抱怨角色表的主键类型与参与方表主键不匹配

以下是代码示例:

[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实现,因为您将获得一对多关系,但其行为将根据您的喜好而定。

请不要在多个位置发布。为什么不让Party
FullAuditedEntity
?因为组织单元和用户实体主键很长