MapKey与HasForeignKey的区别 - 流利的Api

时间:2013-03-24 06:29:19

标签: entity-framework ef-code-first entity-relationship

实际上有什么区别:

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

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

1 个答案:

答案 0 :(得分:82)

两个映射都将使用不可为空的外键SomethingId和两个相关表之间的引用约束创建完全相同的数据库模式。

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

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

以下是关于两种类型的关联及其优点和缺点的一些参考文献: