11

我在使用 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 和实体框架的解决方案?

4

2 回答 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 回答