entity-framework - 一对零/一关系(代码优先)

标签 entity-framework mapping entity-framework-4.1

我正在尝试这门课:

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/

相关文章:

entity-framework-4.1 - 无法隐式转换类型 'System.Collections.Generic.IEnumerable<System.Collections.Generic.ICollection

sql-server - 在 SQL Server 中实现一对零或一关系

c# - Linq 没有显示正确的数字

javascript - 映射两个数组中的值

c# - Entity Framework Database First 是否知道数据库中设置的唯一键?

json - 有没有办法在 Swift 中仅从 JSON 部分创建对象?

c# - 你如何在 iBatis 中映射一个 List<string>?

linq - Moq 测试 LINQ Where 查询

c# - 使用 Entity 框架时对业务逻辑放在哪里的困惑

c# - 在 MVC EF 中使用高级属性的正确方法