我有一个父实体和一个子实体 .
在DB中,父级的主键是 p_p_id
,子级中的外键是相同的 p_p_id
数据库中没有外键约束 .
实体在各自的类中设置属性,指向彼此 .
家长班
public virtual ChildProject ThisChildProject { get; set; }
儿童班
public virtual ParentProject ThisParentProjection { get; set; }
这些属性上没有注释,也没有任何类的ID .
在配置中,我试图在孩子中进行映射 .
HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );
EF会尝试使用子键的主键和父键的主键进行映射 .
但是我想在子节点中使用已定义的FK和父节点的主键
2 回答
默认情况下,EF使用所谓的Shared Primary Key Association,它将依赖实体PK用作主体实体的FK .
您可以通过
Map
- >MapKey
流畅配置指定 hidden (shadow) FK名称来覆盖该行为:Update: 请注意 hidden (shadow) 字 . EF不支持这种类型关系的显式FK属性 - 没有
HasForeignKey
流畅的方法,并且ForeignKey
属性导致错误 . 所以如果你在ChildProject
课程中有这样的东西:我担心唯一的选择是删除它并仅使用导航属性 .
根据您的属性名称,您可能需要添加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