Отношения между сущностью и базовой сущностью - PullRequest
0 голосов
/ 27 марта 2020

Рассмотрим следующее:

public class BaseEntity
{
    public Guid CreatedBy { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
    public Guid ModifiedBy { get; set; }
    public DateTimeOffset ModifiedOn { get; set; }
}

public class User : BaseEntity
{
    public Guid UserId { get; set; }
    public string Email { get; set; }

    public ICollection<Company> Companies { get; set; }
}

public class Company : BaseEntity
{
    public Guid CompanyId { get; set; }
    public string Name { get; set; }

    [ForeignKey("UserId")]
    public User User { get; set; }
}

После того, как я создал первую миграцию и посмотрел таблицы в SQL, я понял свойство навигации User (и все модели, имеющие одинаковый FK) является избыточным, потому что он всегда будет равен Id свойства CreatedBy. Я попытался установить отношения между User и BaseEntity на основе этого ответа (также удалил User FK из модели Company), но безуспешно.

Ошибка:

Невозможно определить отношение, представленное свойством навигации «Company.CreatedBy» типа «Пользователь». Либо настройте отношение вручную, либо игнорируйте это свойство с помощью атрибута [NotMapped] или с помощью EntityTypeBuilder.Ignore в OnModelCreating.

Модели:

public class BaseEntity
{
    public Guid CreatedById { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
    public Guid ModifiedById { get; set; }
    public DateTimeOffset ModifiedOn { get; set; }

    [ForeignKey("CreatedById")]
    public User CreatedBy { get; set; }

    [ForeignKey("ModifiedById")]
    public User ModifiedBy { get; set; }
}

public class User : BaseEntity
{
    public Guid UserId { get; set; }
    public string Email { get; set; }

    public ICollection<Company> Companies { get; set; }
}

public class Company : BaseEntity
{
    public Guid CompanyId { get; set; }
    public string Name { get; set; }
}

Есть ли правильный способ, которым я могу выполнить sh это?
Вариант B - сохранить исходные модели и не использовать навигацию по свойствам CreatedBy / ModifiedBy и запрашивать пользователя при необходимости.

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