【问题标题】:Entity Framework 6 - reuse same table in multiple edmx filesEntity Framework 6 - 在多个 edmx 文件中重用同一个表
【发布时间】:2015-12-21 08:45:41
【问题描述】:

我的任务是升级我们的软件以使用 EF6。以前它使用的是 EF4 和 5 的组合。

我们使用数据库优先的方法。就代码更改而言,升级进展顺利,但在运行应用程序并进行查询后,会引发以下错误。

指定的架构无效。错误:

CLR 类型到 EDM 类型的映射不明确,因为多个 CLR 类型与 EDM 类型“tblAccountMaintenance”匹配。

以前找到的 CLR 类型“DALUsers.StatusDB.tblAccountMaintenance”,新找到的 CLR 类型“DALUsers.AccountsDB.tblAccountMaintenance”。

问题中的类tblAccountMaintenance 是在多个.tt 文件中生成的。这些类是对同一个表的引用,只是在不同的.edmx 文件中引用。

在这种情况下,简单地删除其中一个引用并不是一个好的选择,因为我们对其他几个表使用了类似的策略,并且需要重写数千行代码。

我需要做什么才能在 EF6 中解决此问题?

【问题讨论】:

  • 您是否尝试过将 edmx 文件放在不同的命名空间中?
  • 是的,不同的命名空间
  • 需要修改您的 T4 模板文件,而不仅仅是通过定位 edmx 文件。 除非您创建新的 edmx 文件(模型)并将它们最初放在不同的文件夹中。
  • 每个edmx 文件都在一个单独的文件夹中;在迁移过程中,我删除了所有现有的.tt 文件并从设计器中重新生成它们。 (Add Code Generation Items...)。

标签: c# entity-framework edmx ef-database-first


【解决方案1】:

所以事实证明问题(使用相同的表,在同一个项目中的多个 edmx 文件中具有相同的名称)与 .tt 文件包含派生自 @987654324 的新对象这一事实有关@ - 这是特定于 dbContext 的限制/约束。

我下载了这个插件:https://visualstudiogallery.msdn.microsoft.com/66612113-549c-4a9e-a14a-f629ceb3f89a

这允许我创建从 EnityObject 派生的 EF6 .tt 文件,而不是没有此约束。它也使我不必更新我的所有代码来使用更新的 dbContext 方法,这是一个加号。

作为查看此内容的其他人的说明 - 如果您从较新的项目开始或拥有少量 edmx 文件/表,这可能不是最佳答案,因为 EntityObject 不如 dbContext 强大,但是这是一个很好的创可贴修复 - 特别是如果您像我一样并且在 EF7 推出时必须进行完全重写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多