EF Core 8.0 子级与其他密钥的关系

问题描述 投票:0回答:1

我正在尝试将 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);
entity-framework entity-framework-core
1个回答
0
投票

对于可选的与 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 以外的东西时使用,但这里似乎不是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.