至少可以说这让我有点恼火......
我正在将服务层项目升级到 v.next,并在此过程中将我的所有 Linq to Sql 模型“升级”到实体框架。到目前为止,我已经完成了四个数据库,现在正在运行测试 - 我的测试失败并出现错误
System.Data.MetadataException:指定的架构无效。错误:DB.WebDB.ssdl(2,84):错误 0169:所有 SSDL 工件必须针对同一个提供程序。ProviderManifestToken '2008' 与之前遇到的 '2005' 不同。
做一些谷歌搜索,我发现这通常是由不同的 dev/live sql server 版本引起的。
但是,我的情况有所不同——我有多个运行不同版本的实时数据库服务器——2005、2008 和 2008 R2——我需要能够使用不同的 EDMX 与所有这些服务器通信。
在这个 SO: Multiple Versions of SQL Server using Entity Framework in a single ASP.NET application似乎一种解决方案是将不同版本的 EDMX 拆分为不同的程序集(即 2005 和 2008 版本)。据推测,另一种解决方案将强制我ProviderManifestToken
对 2008 年来源的数据库为2005
.
然而,对我来说,我必须创建不同的程序集纯粹是为了满足 EF 中的一种行为怪癖,这种行为会使一个 EDMX 破坏所有其他的行为是荒谬的——对我来说,单独的程序集是一种架构决策。同样,破解 EDMX 文件以降级 2008 数据库也是不可取的,尤其是当下一个“从数据库更新...”命令将再次更改它时。
有人有替代解决方案吗?