我试图了解当基类中不存在外键时,我需要做什么才能在多个派生类中引入相同的外键。外键是相同的类型,并且我能够使各个派生类都使用相同的列名,但是当我尝试引入外键注释时, Entity Framework 6 根本无法创建任何外键.
值得一提的是,如果我允许 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; }
}
最佳答案
决议EF issue 1964解释说:“然而,在 s 空间中建立关联无论如何都不起作用,因为它会产生两个数据库约束,只有当依赖关系也与其他关系类型的 PK 匹配时才能满足这些约束。这样的匹配通常只会发生意外。解决方案是从 s-space 中删除关联,就像我们对类似的 TPC 映射所做的那样。” (强调我的)
EF 删除合并列上的 FK。在您的例子中,两个 FK 在逻辑上是相同的,但 EF 不知道(或关心)这一点。
关于c# - Entity Framework 6 Code First TPH 多个派生类中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286464/