Sme*_*egs 6 c# entity-framework ef-fluent-api
我有一个父实体和一个子实体。
在数据库中,父级的主键是p_p_id
,子级中的外键是相同的p_p_id
数据库中没有外键约束。
实体具有在各自的类中设置的指向彼此的属性。
家长班
public virtual ChildProject ThisChildProject { get; set; }
Run Code Online (Sandbox Code Playgroud)
儿童班
public virtual ParentProject ThisParentProjection { get; set; }
Run Code Online (Sandbox Code Playgroud)
这些属性或任何一个类的Id上都没有注释。
在配置中,我尝试在子级中进行映射。
HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );
Run Code Online (Sandbox Code Playgroud)
发生的情况是EF尝试使用子级的主键和父级的主键进行映射。
但是我想在子级和父级的主键中使用定义的FK
默认情况下,EF使用所谓的共享主键关联,该将依赖实体PK用作主体实体的FK。
您可以通过-> 流畅的配置指定隐藏的(阴影) FK名称来覆盖该行为:Map
MapKey
HasRequired(e => e.ThisParentProject)
.WithOptional(e => e.ThisChildProject)
.Map(m => m.MapKey("p_p_id"));
Run Code Online (Sandbox Code Playgroud)
更新:请注意隐藏(阴影)词。EF不支持这种类型的关系的显式FK属性-没有HasForeignKey
流畅的方法,而put ForeignKey
属性会导致错误。因此,如果您在ChildProject
课堂上有这样的事情:
[Column("p_p_id")]
public int ThisParentProjectId { get; set; }
Run Code Online (Sandbox Code Playgroud)
恐怕唯一的选择是将其删除并仅与导航属性一起使用。