我的任务是升级我们的软件以使用EF6。以前它使用EF4和amp;的组合。 5.
我们使用数据库第一种方法。代码更改后,升级顺利进行,但在运行应用程序并执行查询后,将引发以下错误。
指定的架构无效。错误:
CLR类型到EDM类型的映射是不明确的,因为多个CLR类型与EDM类型'tblAccountMaintenance'匹配。
以前发现CLR类型'DALUsers.StatusDB.tblAccountMaintenance',新发现CLR类型'DALUsers.AccountsDB.tblAccountMaintenance'。
问题中的课程tblAccountMaintenance
是在多个.tt
文件中生成的。这些类是对同一个表的引用,仅在不同的.edmx
文件中引用。
在这种情况下,简单地删除其中一个引用并不是一个好选择,因为我们使用了与其他几个表类似的策略,并且需要数千行重写代码。
在EF6中我需要做些什么来解决这个问题?
答案 0 :(得分:0)
事实证明问题(使用相同的表,在同一个项目中的多个bundledStream
文件中具有相同的名称)与var Q = require('q');
gulp.task('scripts', ['angular', 'views-js'], function () {
var bundledStream = through();
var deferred = Q.defer();
bundledStream
.pipe(source('app.js'))
.pipe(buffer())
.pipe(debug())
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write(paths.target))
.pipe(gulp.dest(paths.target))
.on('end', function()
{
deferred.resolve();
});
....
return deferred.promise;
文件包含新对象的事实相关派生自edmx
- 这是一个特定于.tt
的限制/约束。
我下载了这个插件: https://visualstudiogallery.msdn.microsoft.com/66612113-549c-4a9e-a14a-f629ceb3f89a
这允许我创建dbContext
dbContext
来自EF6
而不具有此约束的文件。它也使我不必更新我的所有代码以使用更新的.tt
方法。
作为对观看此内容的其他人的说明 - 如果您开始使用较新的项目或者EnityObject
文件/表格数量较少,那么这可能不是最好的答案,因为dbContext
不够健壮作为edmx
,但这是一个很好的创可贴修复 - 特别是如果你像我一样,并且在EF7出来时必须完全重写。