Entity Framework 6 - 在多个 edmx 文件中重复使用相同的 table

Entity Framework 6 - reuse same table in multiple edmx files

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

我们使用数据库优先的方法。就代码更改而言,升级进行得很顺利,但是在 运行 应用程序和执行查询之后抛出以下错误。

Schema specified is not valid. Errors:

The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'tblAccountMaintenance'.

Previously found CLR type 'DALUsers.StatusDB.tblAccountMaintenance', newly found CLR type 'DALUsers.AccountsDB.tblAccountMaintenance'.

问题tblAccountMaintenance中的class是在多个.tt文件中生成的。 class 是对相同 table 的引用,只是在不同的 .edmx 文件中引用。

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

我需要做什么才能在 EF6 中修复此问题?

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

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

这允许我创建 EF6 .tt 派生自 EnityObject 的文件,而不是没有此约束。它还可以做到这一点,因此我不必更新我的所有代码即可使用更新的 dbContext 方法,这是一个优点。

请注意查看此内容的其他人 - 如果您是从一个较新的项目开始或有少量 edmx files/tables 作为 EntityObject,这可能不是最佳答案不如 dbContext 稳健,但这是一个很好的创可贴修复 - 特别是如果您像我一样并且在 EF7 发布时必须进行完全重写。