Да, я думаю, что нет необходимости в свойствах внешнего ключа, и они являются каким-то образом реляционным артефактом в объектном мире. Вы можете определить отношения полностью без свойств FK. В Fluent API вы можете определить, является ли связь необязательной или обязательной, а также можете указать имя столбца внешнего ключа таблицы базы данных. Отношения тогда называются Независимая ассоциация .
Насколько я понимаю, Связи внешних ключей - отношения с открытыми свойствами внешнего ключа в классе модели - существуют только для того, чтобы сделать работу со связями в Entity Framework немного проще и удобнее в определенных сценариях. Например:
Предположим, у вас есть веб-представление для создания или редактирования продукта, а представление содержит поле со списком, чтобы выбрать категорию и назначить ее для продукта. Чтобы заполнить поле со списком при визуализации представления, вы должны загрузить, например, ID
и Name
всех категорий из базы данных.
Когда страница будет отправлена обратно, вы получите свойства продукта и ID
выбранной категории. Если у вас нет свойства внешнего ключа CategoryID
в вашем Product
, вы должны создать отношения следующим образом:
var category = new Category { ID = IDFromComboBox };
context.Categories.Attach(category);
product.Category = category;
Для свойства FK вам нужна только одна строка:
product.CategoryID = IDFromComboBox;
Свойства внешнего ключа не существовали в Entity Framework версии 1 (.NET 3.5) и были представлены в EF версии 4 (.NET 4) для лучшей поддержки сценариев, подобных приведенным выше.
Можно найти критический взгляд на ассоциацию внешних ключей, и разница между двумя типами ассоциаций очень хорошо обсуждается в блоге Ладислава:
http://www.ladislavmrnka.com/2011/05/foreign-key-vs-independent-associations-in-ef-4/