У меня есть объект 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"));