外键属性应该用于导航属性还是普通属性?

时间:2014-02-02 14:54:01

标签: c# entity-framework ef-code-first

我想知道在导航属性或常规属性上指定ForeignKeyAttribute之间有什么区别。

public int ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Parent Parent { get; set; }

[ForeignKey("Parent")]
public int ParentId { get; set; }
public virtual Parent Parent { get; set; }

当与代码优先一起使用时,我看不到创建的数据库的差异。有一种方式比另一方好吗?

2 个答案:

答案 0 :(得分:1)

按惯例,它将ParentId视为外键,因为它是实体的名称,后跟Id。

你应该可以这样做:

public int ParentId { get; set; }
public virtual Parent Parent { get; set; }

但同意@Lukas-Kabrt认为选项1在你的两个例子中更好。

答案 1 :(得分:0)

MSDN上没有提及第二个示例,但源代码中的XML文档更详细,并说:

  

如果放在外键属性上,则为关联导航的名称             属性。如果放在导航属性上,则关联的名称             外键。如果导航属性有多个外键,             应提供以逗号分隔的列表。

所以应该没有任何区别。但对我来说,第一种选择似乎更自然。