如何在 one-to-one/zero 关系中指定外键?
How do I specify the foreign key in a one-to-one/zero relationship?
我有一个 parent 实体和一个 child 实体。
在数据库中 parent 的主键是 p_p_id
并且 child 中的外键是相同的 p_p_id
数据库中没有外键约束。
实体在各自的 classes 中设置了指向彼此的属性。
Parent Class
public virtual ChildProject ThisChildProject { get; set; }
Child Class
public virtual ParentProject ThisParentProjection { get; set; }
这些属性和 class 的 ID 都没有注释。
在配置中,我尝试在 child 中进行映射。
HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );
EF 尝试使用 child 的主键和 parent 的主键进行映射。
但是我想在child中使用定义的外键和parent
中的主键
根据您的 属性 名称,您可能需要添加 ForeignKey 属性,但标准集合声明没问题:
这是您更新后的问题所要求的一对一:
默认情况下,EF 使用所谓的 Shared Primary Key Association,它使用从属实体 PK 作为主体实体的 FK。
您可以通过 Map
-> MapKey
流畅配置指定 隐藏(阴影) FK 名称来覆盖该行为:
HasRequired(e => e.ThisParentProject)
.WithOptional(e => e.ThisChildProject)
.Map(m => m.MapKey("p_p_id"));
更新:请注意隐藏(影子)字。对于这种类型的关系,EF 不支持显式 FK 属性 - 没有 HasForeignKey
流畅的方法并且放置 ForeignKey
属性会导致错误。因此,如果您的 ChildProject
class:
中有这样的内容
[Column("p_p_id")]
public int ThisParentProjectId { get; set; }
恐怕唯一的选择是删除它并仅使用导航属性。
我有一个 parent 实体和一个 child 实体。
在数据库中 parent 的主键是 p_p_id
并且 child 中的外键是相同的 p_p_id
数据库中没有外键约束。
实体在各自的 classes 中设置了指向彼此的属性。
Parent Class
public virtual ChildProject ThisChildProject { get; set; }
Child Class
public virtual ParentProject ThisParentProjection { get; set; }
这些属性和 class 的 ID 都没有注释。
在配置中,我尝试在 child 中进行映射。
HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );
EF 尝试使用 child 的主键和 parent 的主键进行映射。
但是我想在child中使用定义的外键和parent
中的主键根据您的 属性 名称,您可能需要添加 ForeignKey 属性,但标准集合声明没问题:
这是您更新后的问题所要求的一对一:
默认情况下,EF 使用所谓的 Shared Primary Key Association,它使用从属实体 PK 作为主体实体的 FK。
您可以通过 Map
-> MapKey
流畅配置指定 隐藏(阴影) FK 名称来覆盖该行为:
HasRequired(e => e.ThisParentProject)
.WithOptional(e => e.ThisChildProject)
.Map(m => m.MapKey("p_p_id"));
更新:请注意隐藏(影子)字。对于这种类型的关系,EF 不支持显式 FK 属性 - 没有 HasForeignKey
流畅的方法并且放置 ForeignKey
属性会导致错误。因此,如果您的 ChildProject
class:
[Column("p_p_id")]
public int ThisParentProjectId { get; set; }
恐怕唯一的选择是删除它并仅使用导航属性。