我想知道在导航属性或常规属性上指定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; }
当与代码优先一起使用时,我看不到创建的数据库的差异。有一种方式比另一方好吗?
答案 0 :(得分:1)
按惯例,它将ParentId视为外键,因为它是实体的名称,后跟Id。
你应该可以这样做:
public int ParentId { get; set; }
public virtual Parent Parent { get; set; }
但同意@Lukas-Kabrt认为选项1在你的两个例子中更好。
答案 1 :(得分:0)
MSDN上没有提及第二个示例,但源代码中的XML文档更详细,并说:
如果放在外键属性上,则为关联导航的名称 属性。如果放在导航属性上,则关联的名称 外键。如果导航属性有多个外键, 应提供以逗号分隔的列表。
所以应该没有任何区别。但对我来说,第一种选择似乎更自然。