0

好的。

背景。

我最初试图按照以下方式制作 EF 模型:

public class Person
{
    [Key]
    public Guid ID { get; set; }
    public string Name { get; set; }
    public Guid PhoneID { get; set; }

    public virtual ICollection<Phone> Phones { get; set; }
}

public class Org
{
    [Key]
    public Guid ID { get; set; }
    public string Name { get; set; }
    public Guid PhoneID { get; set; }

    public virtual ICollection<Phone> Phones { get; set; }
}

public class Phone
{
    [Key]
    public Guid ID { get; set; }
    public string Number { get; set; }
    public Guid EntityID { get; set; }


    [ForeignKey("EntityID")]
    public virtual User User { get; set; }
    [ForeignKey("EntityID")]
    public virtual Org Org { get; set; }
}

但我现在(大部分)意识到这会导致 SQL Server 中的外键关系完整性出现问题。因此,为了纠正这个问题,我将 Phone 类更改为:

public class Phone
{
    [Key]
    public Guid ID { get; set; }
    public string Number { get; set; }
    public Guid? PersonID { get; set; }
    public Guid? OrgID { get; set; }


    [ForeignKey("PersonID")]
    public virtual User User { get; set; }
    [ForeignKey("OrgID")]
    public virtual Org Org { get; set; }
}

问题。

如何使用模型构建器/Fluent API 强制/映射规则以确保 Phone 对象具有 PersonID 或 OrgID?

编辑:

我确实意识到这会创建一个数据完整性规则,如果我在 SQL Server 中设计数据库,我将无法做到这一点,但对我来说,EF 似乎具有将数据库设计提升到新水平的潜在灵活性。

我将 EF(尤其是 Code-First)视为 Microsoft 在其软件开发战略中的下一个重大飞跃。恕我直言,这与 .Net 的引入一样大的飞跃(现在有一个声明应该引起一些争论!),将数据库设计从数据库本身移开并将其与托管代码集成。

4

0 回答 0