MapKey与HasForeignKey差异 – Fluent Api

实际上有什么区别:

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

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

这两种映射都将创build完全相同的数据库模式,其中不可空的外键SomethingId和两个相关表之间的引用约束。

当您不希望将外键作为模型类中的属性时,将使用MapKey的第一个映射。 这种情况下的关联types被称为独立关联 。 当外键是模型中的属性时,您将使用HasForeignKey应用第二个映射。 这种types被称为外键协会

在许多情况下,使用外键关联更容易,但是许多人认为在对象世界中有一个关系工件(外键)并不那么干净,因此更喜欢独立关联。

下面是关于两种types的协会及其优点和缺点的一些参考文献: