行。
背景
我最初试图按照以下方式制作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; }
}
问题。
如何使用modelbuilder / Fluent API强制执行/映射规则以确保Phone对象具有PersonID或OrgID?
修改:
我确实意识到这是创建一个数据完整性规则,如果我在SQL Server中设计数据库,我将无法做到这一点,但对我来说,似乎EF具有将数据库设计提升到新的水平的潜在灵活性
我认为EF(特别是Code-First)是微软软件开发战略的下一个重大飞跃。恕我直言,这是与.Net的引入一样大的飞跃(现在有一个声明应该产生一些争论!),即将数据库设计从数据库本身转移出来&amp;将其与托管代码集成。