好的。
背景。
我最初试图按照以下方式制作 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 的引入一样大的飞跃(现在有一个声明应该引起一些争论!),将数据库设计从数据库本身移开并将其与托管代码集成。