我正在尝试这门课:
public class Person
{
public int PersonID { get; set; }
public string Name { get; set; }
public int SpouseID { get; set; }
public virtual Person Spouse { get; set; }
}
关系是:
一个人有一个或零个配偶/
一个配偶有一个必需的人
是否可以在 Fluent API 中构建此模型?
谢谢。
最佳答案
不幸的是,不可能建立真正的自引用一对一关系,因为目前 EF 不支持唯一键。使这个真正的自引用一对一SpouseID
必须标记为唯一。 EF 仅允许对主键进行一对一(从属实体中的主键也必须是主体实体的外键),这意味着自引用一对一关系将以 PersonID <-> PersonID
结束。 = 两个相同的实体 PersonID
在单个表中。这是不可能的,因为 PersonID
是主键,它必须是唯一的。
您可以将其作为一对多处理,并且如您所知仅公开单个导航属性:
modelBuilder.Entity<Person>()
.HasOptional(p => p.Spouse)
.WithMany()
.HasForeingKey(s => s.SpouseID);
要在数据库中强制执行一对一关系,您将添加 custom database initializer并在
SpouseID
上手动创建唯一索引柱子。问题是它只是一种导航方式,因此您可以从
Spouse
中获取 Person 的配偶。你无法回到丈夫身边。
关于entity-framework - 一对零/一关系(代码优先),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032065/