MapKey против HasForeignKey Разница - Свободный Api

В чем разница между:

this.HasRequired(a => a.Something)
    .WithMany()
    .Map(a => a.MapKey("SomethingId"));

и

this.HasRequired(a => a.Something)
    .WithMany()
    .HasForeignKey(a => a.SomethingId);

Ответ 1

Оба сопоставления будут создавать точно такую же схему базы данных с невообразимым внешним ключом SomethingId и реляционным ограничением между двумя связанными таблицами.

Первое сопоставление с MapKey используется, когда вы не хотите иметь внешний ключ как свойство в вашем классе модели. Тип ассоциации в этом случае называется Independent Association. Вы должны применить второе сопоставление с HasForeignKey когда внешний ключ является свойством в модели. Этот тип называется Ассоциацией внешних ключей.

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

Вот несколько ссылок на два типа ассоциаций и их "за" и "против":