ef modelBuilder强制外键a或外键b

时间:2012-11-22 04:53:16

标签: c# sql-server asp.net-mvc entity-framework orm

行。

背景

我最初试图按照以下方式制作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;将其与托管代码集成。

0 个答案:

没有答案