В чем разница между:
this.HasRequired(a => a.Something)
.WithMany()
.Map(a => a.MapKey("SomethingId"));
и
this.HasRequired(a => a.Something)
.WithMany()
.HasForeignKey(a => a.SomethingId);
В чем разница между:
this.HasRequired(a => a.Something)
.WithMany()
.Map(a => a.MapKey("SomethingId"));
и
this.HasRequired(a => a.Something)
.WithMany()
.HasForeignKey(a => a.SomethingId);
Оба сопоставления будут создавать точно такую же схему базы данных с невообразимым внешним ключом SomethingId
и реляционным ограничением между двумя связанными таблицами.
Первое сопоставление с MapKey
используется, когда вы не хотите иметь внешний ключ как свойство в вашем классе модели. Тип ассоциации в этом случае называется Independent Association. Вы должны применить второе сопоставление с HasForeignKey
когда внешний ключ является свойством в модели. Этот тип называется Ассоциацией внешних ключей.
Во многих сценариях легче работать с ассоциациями с иностранными ключами, но многие считают его менее чистым иметь реляционный артефакт (внешний ключ) в объектном мире и поэтому предпочитают независимые ассоциации.
Вот несколько ссылок на два типа ассоциаций и их "за" и "против":