我正在尝试将 Parent 的 Child 属性加入到 OtherId 上。然而,外国人、本金等的结合并没有取得成功。
我通常会得到:外键必须针对属于关系一部分的类型。错误。
让它发挥作用的正确方法是什么。
public class Parent
{
public int Id
public int OtherId { get; set; }
public Dependent Child { get; set; }
}
public class Dependent
{
public int OtherId { get; set; }
public string Name { get; set; }
}
我尝试过以下各种版本:
modelBuilder.Entity<Parent>()
.HasOne(x => x.Child )
.WithOne()
.HasForeignKey<Child >(x => x.OtherId )
.HasPrincipalKey<Parent>(x => x.OtherId )
.IsRequired(false);
对于可选的与 FK 的一对一:
public class Parent
{
public int Id
public int? OtherId { get; set; }
public Dependent? Child { get; set; }
}
public class Dependent
{
public int OtherId { get; set; }
public string Name { get; set; }
}
modelBuilder.Entity<Parent>()
.HasOne(x => x.Child )
.WithOne()
.HasForeignKey<Parent>(x => x.OtherId);
IsRequired(false)
隐含着可为空的 FK。对于必需的关系,请将 Parent 中的 OtherId 和 Child 导航属性设置为不可为 null。同样,会暗示IsRequired(true)
。 IsRequired(true)
的用途主要是当您想要一个可以为 null 的导航属性以使编译时警告围绕未设置的引用变量保持满意,同时仍然告诉 EF 该关系是必需的。 HasPrincipalkey
当 FK 指向目标表(Dependent)上的 PK 以外的东西时使用,但这里似乎不是这种情况。