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

Ian*_*n B 11 entity entity-framework sql-server-2005 sql-server-2000

我在使用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和Entity Framework?

Cog*_*eel 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 
              };
Run Code Online (Sandbox Code Playgroud)


fra*_*ins 5

当SQL Server 2005和2008存在差异时,此链接帮助我解决了问题 .http://kkryczka.wordpress.com/2011/01/03/all-ssdl-artifacts-must-target-the-same-提供最providermanifesttoken-2008-IS-不同,从2005年-也就是说,在遇到的同期/

右键单击.edmx文件,然后选择"使用XML编辑器打开".Open Entity Framework .edmx文件:

将ProviderManifestToken更改为2008:

看起来它是微软的一个已知问题.