实体框架6代码在多个派生类中的第一个TPH外键

时间:2014-12-04 04:45:09

标签: c# entity-framework

当我在基类中不存在外键时,我试图理解我需要做什么才能在多个派生类中引入相同的外键。外键是相同的类型,我能够使各种派生类都使用相同的列名,但是当我尝试引入外键注释时,实体框架6默默地无法创建任何外键

值得一提的是,如果我允许EF创建Bar_Name1而不是重用现有列,它会适当地添加外键。但是我来自关系数据库背景,它冒犯了我的敏感性,为同一个东西拥有多个列。

我希望能够坚持使用Annotations来标记我的代码,但是如果这是使用Annotations无法完成但可以使用Fluent API完成的,我愿意深入研究

public class Foo
{
    [Key]
    public string Name { get; set; }
}

public class FooSub1 : Foo
{
    [Required, Column("Bar_Name")]
    public string Bar_Name { get; set; }

    [ForeignKey("Bar_Name")]
    public Bar Bar { get; set; }
}

public class FooSub2 : Foo
{
    [Required, Column("Bar_Name")]
    public string Bar_Name { get; set; }

    [ForeignKey("Bar_Name")]
    public Bar Bar { get; set; }
}

public class Bar
{
    [Key]
    public string Name { get; set; }
}

1 个答案:

答案 0 :(得分:0)

EF issue 1964的解决方案解释说:“但是,在s空间中建立关联无论如何都不起作用,因为它导致两个数据库约束,只有当依赖关系也匹配PK时才能满足其他关系类型。这样的匹配通常只会偶然发生。解决方案是从类似的TPC映射中删除s空间中的关联。“ (强调我的)

EF会删除合并列上的FK。在你的情况下,两个FK在逻辑上是相同的,但EF不知道(或关心)那个。