c# – 如何以一对一/零关系指定外键?
作者:互联网
我有一个父实体和一个子实体.
在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和父节点的主键
解决方法:
默认情况下,EF使用所谓的Shared Primary Key Association,它将依赖实体PK用作主体实体的FK.
您可以通过Map – >指定隐藏(阴影)FK名称来覆盖该行为. MapKey流畅配置:
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; }
我担心唯一的选择是删除它并仅使用导航属性.
标签:c,entity-framework,ef-fluent-api 来源: https://codeday.me/bug/20190608/1197391.html