编程语言
首页 > 编程语言> > c# – 如何以一对一/零关系指定外键?

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