繁体   English   中英

多个派生类中的实体框架 6 Code First TPH 外键

[英]Entity Framework 6 Code First TPH Foreign Key in multiple derived classes

我试图了解当基类中不存在外键时,我需要做什么才能在多个派生类中引入相同的外键。 外键是相同的类型,我可以让各种派生类都使用相同的列名,但是当我尝试引入外键注释时,实体框架 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 问题 1964的解决方案解释说:“然而,在 s 空间中建立关联无论如何都不起作用,因为它会导致两个数据库约束,只有当依赖项也与其他关系类型的 PK 匹配时才能满足这些约束。例如匹配通常只会偶然发生。解决方案是从 s 空间中删除关联,就像我们对类似 TPC 映射所做的那样。” (强调我的)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM