如何以一对一/零关系指定外键?

我有一个父实体和一个子实体。

在DB中,父级的主键是p_p_id ,子级中的外键是相同的p_p_id

数据库中没有外键约束。

实体具有在各自的类中相互指向的属性。

家长class

 public virtual ChildProject ThisChildProject { get; set; } 

儿童class

 public virtual ParentProject ThisParentProjection { get; set; } 

这些属性上没有注释,也没有任何类的ID。

在配置中,我试图在孩子中进行映射。

 HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject ); 

EF会尝试使用子键的主键和父键的主键进行映射。

但是我想在子节点中使用已定义的FK和父节点的主键

默认情况下,EF使用所谓的共享主密钥关联 ,它将依赖实体PK用作主体实体的FK。

您可以通过Map – > MapKey fluent配置指定隐藏(阴影) FK名称来覆盖该行为:

 HasRequired(e => e.ThisParentProject) .WithOptional(e => e.ThisChildProject) .Map(m => m.MapKey("p_p_id")); 

更新:请注意隐藏(阴影)字。 EF不支持此类关系的显式FK属性 – 没有HasForeignKey流畅方法,并且将ForeignKey属性导致错误。 所以如果你在ChildProject类中有这样的东西:

 [Column("p_p_id")] public int ThisParentProjectId { get; set; } 

我担心唯一的选择是删除它并仅使用导航属性。

根据您的属性名称,您可能需要添加ForeignKey属性,但标准集合声明很好:

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

根据您更新的问题,这里是One-One:

http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx