在EF中,无主且相关的一对一

本文关键字:一对一 EF | 更新日期: 2023-09-27 18:11:56

在这个问题中(实体框架中1:1关系中关联的主端是什么意思),最好的答案是:

在一对一关系中,一端必须是主端,另一端必须是从属端。主端是第一个插入的端,它可以在没有从属端的情况下存在。依赖端是必须插入到主体之后的端,因为它具有主体的外键。

我想知道,我如何在没有主体和依赖元素的实体框架中实现一对一的关系?例如:

public class Person {
    public int Id {get;set;}
    public string Name {get;set;}
    public Person Spouse {get;set;}
}

每个人可能有也可能没有另一个配偶。如果在一对一中必须满足主元素和从属元素的存在,那么,在这个Person模型中,哪里是主元素,哪里是从属元素?

在EF中,无主且相关的一对一

Gilad在链接中指出EF不能将一一对应的关系映射到同一个表。

但是,您可以使用下面的Code First Fluent API来模拟到同一个表的一对一关系。在底层,它们的行为和你想要的一样。
public class Person
{
    public Person()
    {
        Dependents = new List<Person>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    public int Spouse { get; set; }
    public virtual ICollection<Person> Dependents { get; set; }
    public virtual Person Primary { get; set; }
}
public class PersonMap : EntityTypeConfiguration<Person>
{
    public PersonMap()
    {            
        HasRequired(t => t.Primary)
            .WithMany(t => t.Dependents)
            .HasForeignKey(d => d.Spouse);
    }
}