我在使用 SQL Server 2000、2005 和 2008 的 Web 应用程序中使用实体框架。当我使用 2008 以外的任何内容(创建的第一个 edmx 的版本)创建新的 EDMX 文件时,我收到error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier.
似乎代码中的某处该连接连接到 2008 数据存储,当它检查 SSDL 文件并看到不同的 ProviderManifestToken 值时,它会引发此错误。我有点沮丧。很难想象 EF 将仅适用于每个应用程序的单个版本的 Sql Server。我相当确定必须有一个设置或解决方法。有没有人可以在单个 Web 应用程序中使用不同版本的 SQL Server 和实体框架的解决方案?
问问题
8732 次
2 回答
24
我能够通过将每个组件放在edmx
单独的组件中来实现这一点。然后在连接字符串中,将所有的替换res://*/...
为res://NameOfAssembly/...
我什至可以在两个实体模型之间执行连接(与我在其他来源中发现的声明相反),例如:
var oneDb = new Entities2000();
var otherDb = new Entities2005();
var results = from one in oneDb.SomeSet
join other in otherDb.OtherSet
on one.Property equals other.Property
select new {
SomeProp = one.SomeProp,
OtherProp = other.OtherProp
};
于 2009-10-16T16:36:01.450 回答
5
当 SQL Server 2005 和 2008 存在差异时,此链接帮助我解决了问题。 http://kkryczka.wordpress.com/2011/01/03/all-ssdl-artifacts-must-target-the-same- provider-the-providermanifesttoken-2008-is-different-from-2005-that-was-encountered-earlier/
右键单击 .edmx 文件并选择使用 XML 编辑器打开。打开实体框架 .edmx 文件:
将 ProviderManifestToken 更改为 2008:
看起来它是微软的一个已知问题。
于 2011-01-27T21:11:43.403 回答