Как изменить ASP. NET Идентификатор объекта роли Boilerplate с int на long - PullRequest
0 голосов
/ 23 февраля 2020

Мне нужно добавить новую партийную сущность (таблица). Этот объект следует шаблону проектирования стороны, где 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");
   });

1 Ответ

0 голосов
/ 20 марта 2020

Вы не можете изменить тип RoleId, не перестраивая стандартный пакет Abp. Вот как это было, к сожалению, дизайн. Однако вы можете обойти это и добавить дополнительную таблицу с RoleId, а в построителе модели сделать ее таблицей в качестве уникального арендатора. Это не будет SQL строгой реализацией, потому что вы получите отношение один-ко-многим, но поведение будет таким, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...