Не зная истинной мотивации, я думаю, что ценность этих дополнительных столбцов возникает, когда вы выставляете свои сущности через веб-сервисы или непосредственно на уровне представления, что, кстати, я лично не рекомендую или рекомендую.
Рассмотрим следующие примеры.
Если у вас не было свойств внешнего ключа, тогда ваш клиентский код будет выглядеть следующим образом.Скорее всего, вы не захотите загружать экземпляр категории из хранилища данных, поэтому в итоге вы создаете новый экземпляр категории с только Id, установленным только для представления отношения FK.
var product = new Product
{
Category = new Category {Id = 1},
Name = "Product 1"
};
В предыдущей версии Entity Framework это было еще более грязно, и вы получили такой код.
var product = new Product();
product.Name = "Product 1";
product.CategoryReference = new EntityReference<Category>();
product.CategoryReference.SetEntityKey<Category>(1);
Хотя это может быть не чисто, я лично думаю, что это намного легче читать и меньше работать для клиента.
var product = new Product
{
CategoryId = 1,
Name = "Product 1"
};
Плюсы
Упрощенное программирование для клиентов, работающих с вашими сущностями.
Минусы
Не совсем чисто с точки зрения DDD иметь два свойства в вашей сущности.