在单个ASP.NET应用程序中使用Entity Framework的多个版本的SQL Server

时间:2009-06-30 02:02:08

标签: sql-server-2005 entity-framework sql-server-2000 entity

我在使用SQL Server 2000,2005和2008的Web应用程序中使用实体框架。当我使用2008以外的任何东西(创建的第一个edmx的版本)创建新的EDMX文件时,我收到{{1}似乎代码中的某处连接连接到2008数据存储区,当它检查SSDL文件并看到不同的ProviderManifestToken值时,它会抛出此错误。我有点沮丧。很难想象EF只能在每个应用程序中使用单个版本的Sql Server。我相当肯定必须有一个设置或解决方法。有没有人有解决方案在单个Web应用程序中使用不同版本的SQL Server和Entity Framework?

2 个答案:

答案 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:

看起来这是微软的一个已知问题。