我在使用SQL Server 2000,2005和2008的Web应用程序中使用实体框架。当我使用2008以外的任何东西(创建的第一个edmx的版本)创建新的EDMX文件时,我收到{{1}似乎代码中的某处连接连接到2008数据存储区,当它检查SSDL文件并看到不同的ProviderManifestToken值时,它会抛出此错误。我有点沮丧。很难想象EF只能在每个应用程序中使用单个版本的Sql Server。我相当肯定必须有一个设置或解决方法。有没有人有解决方案在单个Web应用程序中使用不同版本的SQL Server和Entity Framework?
答案 0 :(得分: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
};
答案 1 :(得分: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编辑器打开”。 Open Entity Framework .edmx文件:
将ProviderManifestToken更改为2008:
看起来这是微软的一个已知问题。