2014-12-04 75 views
0

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

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

我希望能够坚持使用注解来标记我的代码,但如果这是注解无法完成但可以使用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; } 
} 

回答

0

分辨率为EF issue 1964解释道:“不过,在这里具有S-空间关联并不无论如何,因为这将导致两个数据库的限制,只能满足工作,如果依赖也匹配PK的其他关系类型,这种匹配通常只会偶然发生。解决的办法是从s空间中删除关联,就像我们为类似的TPC映射所做的那样。 (强调我的)

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

+1

感谢您的回复。 为了记录,我最终将所有的字段放在基表中的多个派生表中,并选择为我的应用程序创建接口来使用。通过接口限制底层对象的可用性是非常容易的,这可能是一种更好的方式来处理所有事情。 – 2014-12-05 21:04:05