EF Core 一对一关系,其中双方都是可选的,但其中一个 属性 不可为空

EF Core One to one relation where both sides are optional but one property is not nullable

我有一个看起来像这样的模型:

public class Foo
{
    public long Id { get; set; }
    public long? BarId { get; set; }
    public virtual Bar? Bar { get; set; }
}

public class Bar
{
    public long Id { get; set; }
    public virtual Foo? Foo { get; set;}
    
    // This would be easy, but I want a one to one relation
    // public virtual ICollection<Foo> Foos { get; set; } = new HashSet<Foo>();
}

我现在想配置一对一关系。 棘手的部分是 Bar.Id 可能具有 Foo.BarId 列中不存在的值。

所以这一定是可能的

Id BarId
1 3
2 null

Id
3
4 (no Foo.BarId that matches)

如何使用 DataAnnotations 或 Fluent 配置实现此目的?

试试这个

public class Foo
{
    [Key]
    public long Id { get; set; }

    public long? BarId { get; set; }

    [ForeignKey(nameof(BarId))]
    [InverseProperty("Foo")]
    public virtual Bar Bar { get; set; }
}

public class Bar
{
    [Key]
    public long Id { get; set; }

    [InverseProperty("Bar")]
    public virtual Foo Foo { get; set;}

}

但如果您使用 net5+,您可能不需要任何属性或流畅的 Apis