Я новичок в EF Core, создавая проект доступа к данным, используя сначала код для определения схемы данных. Все работает, миграции были сгенерированы, а затем база данных из этих миграций. Однако у меня есть вопрос об альтернативных способах определения отношений.
Я ссылаюсь на превосходные Learn Entity Framework Core и Entity Framework Core Tutorial . На базовой странице Learn Entity Framework об определении отношений один-ко-многим в https://www.learnentityframeworkcore.com/conventions/one-to-many-relationship, говорится, что класс родительского объекта должен иметь ссылку на дочерний объект, но ссылка обратно от дочернего объекта к родительскому элементу является необязательной. Пример, который они приводят, комментируется мной:
// Parent entity.
public class Author
{
public int AuthorId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// Reference from parent to child: REQUIRED
public ICollection<Book> Books { get; set; }
}
// Child entity.
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
// References from child to parent: OPTIONAL
public int AuthorId { get; set; }
public Author Author { get; set; }
}
Мой вопрос: всегда ли требуется ссылка от родителя к потомку или можно определить отношения, только добавив ссылку от потомка к родителю?
Причина, по которой я спрашиваю, состоит в том, что иногда вы ожидаете, что родитель знает о своих детях, а иногда нет.
Например, Order (родительский) и OrderItem (дочерний). Ордену имеет смысл знать об элементах, которые составляют заказ - родитель должен знать о ребенке.
Примером случая, когда я не ожидал, что родитель будет знать о своих дочерних элементах, является случай, когда родительский объект является своего рода универсальной ссылочной сущностью, которая может появляться во многих различных дочерних таблицах. Например, Статус. В этом случае я ожидаю, что ребенок должен знать о родителе («каков мой статус?»), Но родитель, являющийся универсальным ссылочным типом, не должен знать обо всех своих возможных дочерних элементах. Я не ожидал бы определить сущность Status, которая имеет свойство Orders, свойство Processes, свойство Invoices, свойство Creditors, свойство Debtors и т. Д. Это просто не имеет логического смысла.
ИтакМожно ли определить отношения только от дочерней сущности, не включая свойство в родительской, которое ссылается обратно на дочернюю сущность?