Базовый код Entity Framework First: могут ли отношения между моделями быть определены исключительно в дочернем классе или требуется ссылка из родительского класса? - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в 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 и т. Д. Это просто не имеет логического смысла.

ИтакМожно ли определить отношения только от дочерней сущности, не включая свойство в родительской, которое ссылается обратно на дочернюю сущность?

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