在这个question中(关联的主要结尾在实体框架中以1:1的关系表示什么)最好的答案是:
在一对一关系中,一端必须是主要的,第二端必须是依赖的。主端是首先插入的端,而不存在依赖端的端。从属端是必须在主体之后插入的端,因为它具有主体的外键。
我想知道,如何在没有主要元素和依赖元素的实体框架中实现一对一的关系? 例如:
public class Person {
public int Id {get;set;}
public string Name {get;set;}
public Person Spouse {get;set;}
}
每个人可能会或可能不会有另一个人作为配偶。如果一对一必须满足主要和从属元素的存在,那么,在这个Person模型主体和依赖元素的位置?
答案 0 :(得分:2)
正如吉拉德在link中指出的那样,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);
}
}