Когда использовать, а не использовать свойство обратной навигации? - PullRequest
0 голосов
/ 24 апреля 2019

Очевидно, когда использовать свойство навигации. Но когда мне следует использовать обратное навигационное свойство, а когда не следует использовать обратное навигационное свойство?

Следует ли мне всегда использовать свойство обратной навигации, когда я использую свойство навигации для создания двунаправленного отношения?

Есть ли руководящие принципы?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Мой руководящий принцип - стремиться к простоте.Я не использую их, пока мне не понадобится .:) Как и любой другой открытый член или метод (или любой другой код), он должен существовать только в том случае, если это существование оправдано.

Наличие обратного свойства означает, что я могу рассматривать эту сущность какна верхнем уровне и должны иметь возможность ссылаться на связанный объект.Например, Клиент содержит Заказы, поэтому вопрос заключается в том, должна ли ссылка на Заказ возвращаться к его Клиенту?

Если я могу запрашивать заказы (независимо от Клиента) и хочу иметь возможность доступа к информации о клиенте в этих запросах, тогдавыгодно иметь обратное свойство.

var orderDetails = context.Orders.Where(o => o.OrderDate == DateTime.Today)
    .Select(o => new 
    {
        o.OrderId,
        o.OrderNumber,
        CustomerName = o.Customer.Name
    }).ToList();

В отличие от присоединения клиента и заказа в запросе, чтобы получить доступ к деталям клиента и заказа через однонаправленную ссылку.(Я пытался написать пример из памяти, но он стал слишком уродливым и слишком быстрым.: D)

Где не имеет смысла, это «всегда» иметь двунаправленные ссылки.Например, когда у вас есть что-то вроде Address и AddressType.AddressType никогда не нужно будет знать о списке адресов этого типа, и даже если вы захотите запросить эту информацию, ее достаточно легко отфильтровать по однонаправленной ссылке.Имеет смысл, что Адрес (относительно типа адреса) является ссылкой верхнего уровня, где, поскольку имеет смысл, что вы можете ссылаться на заказы от клиента или клиента из заказа.

1 голос
/ 24 апреля 2019

Они не влияют на создаваемый sql. Так что с точки зрения структуры базы данных это не важно.

Но когда вы запрашиваете данные из базы данных с помощью linq, вы можете использовать эти свойства в выражениях «где» и «включать». Так что это дает вам больше возможностей для создания запроса.

Я почти всегда задаю свойство обратной навигации.

...