在單個ASP.NET應用程序中使用Entity Framework的多個版本的SQL Server

entity entity-framework sql-server-2000 sql-server-2005

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

一般承認的答案

我能夠通過將每個edmx放在一個單獨的程序edmx來實現這一edmx 。然後在連接字符串中,用res://NameOfAssembly/...替換所有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 
              };

熱門答案

當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:

看起來它是微軟的一個已知問題。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因