如何将 ASP.NET 样板角色实体 ID 从 int 更改为 long
How to change ASP.NET Boilerplate Role entity Id from int to long
我需要添加一个新的派对实体 (table)。该实体遵循参与方设计模式,其中用户、组织单位和角色实体 Id 是主键,也是链接到参与方实体主键的外键。我能够使用用户实体和组织实体实现这一点,但不能使用角色实体,因为角色 ID 是整数。
EF 核心投诉角色 table 的主键类型与方 table 主键不匹配。
下面是代码示例:
[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");
});
如果不重新构建标准 Abp 包,则无法更改 RoleId 类型。不幸的是,这就是它的设计方式。但是,您可以解决此问题并添加额外的 table 和 RoleId,并在模型构建器中将其设为 table 作为 Unique Tenant Wise。这将不是真正的 SQL 严格实施,因为您将获得一对多关系,但它的行为将如您所愿。
我需要添加一个新的派对实体 (table)。该实体遵循参与方设计模式,其中用户、组织单位和角色实体 Id 是主键,也是链接到参与方实体主键的外键。我能够使用用户实体和组织实体实现这一点,但不能使用角色实体,因为角色 ID 是整数。
EF 核心投诉角色 table 的主键类型与方 table 主键不匹配。
下面是代码示例:
[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");
});
如果不重新构建标准 Abp 包,则无法更改 RoleId 类型。不幸的是,这就是它的设计方式。但是,您可以解决此问题并添加额外的 table 和 RoleId,并在模型构建器中将其设为 table 作为 Unique Tenant Wise。这将不是真正的 SQL 严格实施,因为您将获得一对多关系,但它的行为将如您所愿。