ef core игнорирует свойство навигации - PullRequest
0 голосов
/ 12 мая 2018

У меня есть объект User, у которого есть два свойства CreatedBy и UpdatedBy, оба ссылающиеся на User. По умолчанию EF предполагает, что эти два как один к одному относятся друг к другу. Я получаю следующее сообщение об ошибке:

Сообщение: System.InvalidOperationException: дочерняя / зависимая сторона не может быть определена для отношения «один к одному», которое было обнаружено между «User.CreatedBy» и «User.UpdatedBy». Чтобы определить дочернюю / зависимую сторону отношения, настройте свойство внешнего ключа. Если эти переходы не должны быть частью одного и того же отношения, настройте их без указания обратного. Подробнее см. http://go.microsoft.com/fwlink/?LinkId=724062.

В настоящее время у меня есть такой класс:

public class User
{

    public int Id { get; set; }

    public int? CreatedById { get; set; }
    public User CreatedBy { get; set; }

    public int? UpdatedById { get; set; }
    public User UpdatedBy { get; set; }

}

По сути, вот что я пытаюсь:

  • Созданное и обновленное не будет иметь никакого отношения друг к другу (не требуется навигация / обратное свойство)
  • Любое количество пользователей может иметь одинаковые CreatedBy, и любое количество пользователей может иметь одинаковые UpdatedBy.

Как я могу попросить EF просто игнорировать свойство навигации? Основная причина, по которой у меня есть CreatedBy, заключается в том, что я могу использовать Include(u => u.CreatedBy) позже. Я знаю, что использование свойства IEnumerable<User> AllCreatedUsers решит эту проблему, но я не хотел создавать IEnumerable для каждого объекта. Есть ли способ сделать это с помощью свободного API?

Вот что я попробовал:

modelBuilder.Entity<User>()
                .Property<IEnumerable<User>>("AllCreatedUsers");

modelBuilder.Entity<User>().HasOne(u => u.CreatedBy)
                                .WithMany(u => EF.Property<IEnumerable<User>>(u, "AllCreatedUsers"));

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

You ForeignKey аннотация данных для обоих свойств.

public class User
{
    public int Id { get; set; }

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

    public int? UpdatedById { get; set; }
    [ForeignKey("UpdatedById")]
    public User UpdatedBy { get; set; }
}
0 голосов
/ 12 мая 2018

Вам необходимо настроить два отношения одиночного свойства навигации с использованием перегрузки метода WithMany без параметров:

modelBuilder.Entity<User>()
    .HasOne(u => u.CreatedBy)
    .WithMany();

modelBuilder.Entity<User>()
    .HasOne(u => u.UpdatedBy)
    .WithMany(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...