【问题标题】:Why does Database First EF skip mapping some tables?为什么 Database First EF 跳过映射某些表?
【发布时间】:2017-09-29 11:54:26
【问题描述】:

我正在使用 Entity Framework 4 和 Database First 绑定,并且 EF 没有为我的一些表生成实体。我没有收到任何错误,无论我从设计图面上的“从数据库更新模型”弹出菜单中选择要生成的表多少次,模型中仍然缺少相同的表。

我在向导中没有收到任何错误。它们只是没有生成。有什么线索吗?

【问题讨论】:

  • 这些表中是否有主键?
  • @Akash,这可能是模式。看起来这些表中的所有字段都可以为空,因此 EF 可能无法假定 PK 值。如果您想将您的评论转换为答案,我会接受。

标签: entity-framework-4 database-first ef-database-first


【解决方案1】:

EF 需要表上的主键。 EF 不会映射无法找到或派生主键的表。如果所有列都可以为空,则不能假定主键。如果一个或多个列不可为空,EF 显然会为该表派生一个主键。

【讨论】:

    【解决方案2】:

    EF 将忽略没有主键的表。

    【讨论】:

    • 次要澄清 - EF 不会映射它无法找到或派生主键的表。如果所有列都可以为空,则不能假定主键。
    • No EF 对可空列没有问题,它只检查主键。并且主键不能为空,所以不考虑为空的条件。
    • 好吧,我只能说试试看。如果所有列都可以为空,则表将静默映射失败。如果您有一个或多个列不可为空,它会派生一个主键并映射表。
    • 从哪里导出主键?
    【解决方案3】:

    我能想到的选项:

    • 您是否选中了这些表格旁边的框?

    • 您之前是否添加了它们,然后删除了它们的实体但保留了表的缓存?

    • 如果是这样,您可以从实体浏览器窗口中删除它们并重新添加它们 或手动添加实体并在映射窗口中定义它们映射到的表。

    • 也许表被归类为关系而不是实体?

    • 您可以手动添加实体并在映射窗口中选择它们映射到的表。

    【讨论】:

    • 感谢您的回复,丹尼。正如我在问题中指出的那样,我一再尝试通过向导重新映射它们,但它们从未映射。在最初创建模型时,我也会选择要在模型中绑定的所有表。如果必须的话,我可能可以为它们创建手动映射,但这并不能回答为什么它们首先没有被映射的问题,而且对于从数据库中的数据库更新模型也不是好兆头未来。
    • 尝试从工具箱中添加新实体,而不是从向导中添加并映射它。
    【解决方案4】:

    实际上,在我的情况下,它不起作用,因为我使用 hierarchyid 字段作为主键,而 EF 不适用于此字段类型,因此,它没有导入表,因为有效的 PK是必需的。

    【讨论】:

      【解决方案5】:

      当您使用具有一些不同字段类型的表时,可能是 SQL Server 中的层次结构。

      【讨论】:

        【解决方案6】:

        如果没有在 EF 上自动跳过的主键表,否则您将值固定为非空。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多