В каких сценариях мне нужны внешние ключи и свойства навигации в инфраструктуре сущности

Класс My Order имеет:

public int CustomerId { get; set; }

public Customer Customer { get; set; }

Мне действительно нужны оба свойства, чтобы заставить отношение работать?

Я не использую отключенные сущности, я использую первый подход кода.

Ответы

Ответ 1

Согласно книге Юлии Лерман: Программирование Entity Framework: DbContext, разница заключается в сложности обновления свойства навигации. На стр. 85 она предлагает "Если есть одна вещь, которую вы можете сделать, чтобы облегчить вашу жизнь в сценариях N-Tier, ее можно выявить свойства внешнего ключа для отношений в вашей модели". В книгу включены образцы для обоих сценариев.

Причина заключается в том, что включение свойства внешнего ключа сообщает Entity Framework использовать Ассоциацию внешних ключей, которая проще, чем использование так называемой независимой ассоциации, когда вам необходимо обновить взаимосвязь, то есть изменить порядок от одного клиента к другому в вашем примере. С ассоциацией внешних ключей все, что вам нужно сделать, это изменение CustomerId. Без внешнего ключа CustomerId вам потребуется больше шагов. Независимая ассоциация использует ObjectStateManager, который объясняется Code First: Независимые ассоциации и ассоциации внешних ключей? ObjectStateManager является сложным и даже не доступен из API DbContext.