【问题标题】:EF 6 - duplicate navigation properties with inherited entityEF 6 - 具有继承实体的重复导航属性
【发布时间】:2015-08-07 08:54:45
【问题描述】:

我有一个包含多个表和实体框架 EDMX 模型的数据库。假设我有以下简化结构。

表:人
列:PersonId (PK)

表:父
列:PersonId (PK, FK)

表:儿童
列:PersonId(PK、FK)
列:ParentId (FK)

为简洁起见,我删除了其他列。 PersonId 是所有表中的主键,它是从 Parent 和 Child 表到 Person 表的外键。此外 Child 通过 ParentId 列与 Parent 有外键关系。

我还在 EDMX 中进行了配置,因此 Parent 和 Child 的 BaseType 为 Person。现在,当我在 Visual Studio 中执行“从数据库更新模型...”时,我有一些额外的导航属性。现在,父实体具有子表的子导航属性,这是正确的,因为子表中的 ParentId 外键。然而,父表也有 Persons 导航属性,它是 Person 实体的列表。我猜这是因为 Child 是从 Person 派生的,但我看不出有任何原因,因为我已经拥有 Childs 子类(Child)的属性。

我认为它在前一段时间运行良好,但现在每次使用“从数据库更新模型”时,我都必须手动删除父子节点的冗余关联和导航属性。也许我缺少一些配置,任何帮助将不胜感激。

最近我也将 EF 升级到了版本 6,所以这可能导致了这个问题吗? 这也是数据库优先的方法。

【问题讨论】:

  • 我不太了解您的数据库结构。只需 2 张桌子,您就可以更轻松地完成所有这些工作?
  • 正如我所说,这是一个简化的结构。我在 Person、Parent 和 Child 表中还有很多其他列。

标签: .net sql-server database entity-framework entity


【解决方案1】:

实际上 Person 和 Parent 表中有很多列,而 Child 表中只有两列。事实证明,EF 将我的 Child 表视为 Parent 和 Person 之间的多对多关系。 基本上,如果任何表只有两列并且它们都是其他表的外键,则 EF 将任何表视为多对多关系。 我的修复很明显 - 我只是在子表中添加了一个新列:

表:儿童
列:PersonId BIGINT NOT NULL(PK、FK)
列:ParentId BIGINT NOT NULL (FK)
列:ChildIdentity BIGINT Identity(1,1) NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    相关资源
    最近更新 更多