Отношение «один к одному» и «один ко многим» между одними и теми же таблицами - PullRequest
1 голос
/ 20 сентября 2019

Я использую ef core 2.1, а структура данных выглядит следующим образом:

Сущности

public class EmployeeEntity : BaseEntity
{
    public string EmployeeNo { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public int? Status { get; set; }

    public virtual Guid? OrganizationId { get; set; }
    public virtual OrganizationEntity Organization { get; set; }
}

public class OrganizationEntity : BaseEntity
{
    public string Text { get; set; }

    public Guid? ParentOrganizationId { get; set; }
    public virtual OrganizationEntity ParentOrganization { get; set; }

    public virtual Guid? ManagerId { get; set; }
    public virtual EmployeeEntity Manager { get; set; }

    public virtual ICollection<OrganizationEntity> ChildOrganizations { get; set; }
    public virtual ICollection<EmployeeEntity> Employees { get; set; }
}

Текущая конфигурация

private void ConfigureOrganization(EntityTypeBuilder<OrganizationEntity> builder)
{

    builder.ToTable("Organization");

    builder.HasMany(o => o.Employees).WithOne(e => e.Organization).HasForeignKey(f => f.OrganizationId).OnDelete(DeleteBehavior.Restrict);

    builder.HasMany(o => o.ChildOrganizations).WithOne(o => o.ParentOrganization).HasForeignKey(o => o.ParentOrganizationId)
        .OnDelete(DeleteBehavior.ClientSetNull);
}

private void ConfigureEmployee(EntityTypeBuilder<EmployeeEntity> builder)
{
    builder.ToTable("Employee");

    builder.HasOne(e => e.Organization).WithMany(o => o.Employees).HasForeignKey(e => e.OrganizationId).OnDelete(DeleteBehavior.Restrict);
}

С учетом этого, яЯ понял, что у меня есть дополнительный столбец OrganizationEntityId в моей таблице Employee, поэтому я попытался с помощью приведенного ниже conf, чтобы исправить это.

Невозможно создать связь между «OrganizationEntity.Employees» и «EmployeeEntity.Organization», поскольку между «OrganizationEntity.Manager» и «EmployeeEntity.Organization» уже существует связь.Свойства навигации могут участвовать только в одном отношении

Какая будет правильная конфигурация для обеспечения надежного отношения и правильных столбцов в таблицах?Я открыт для изменения структуры данных между прочим.

Примечание: словесный эквивалент структуры данных равен ;

  • В организации много сотрудников.
  • Сотрудник может принадлежать организации или любому
  • В организации может быть менеджер (сотрудник) или любой
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...