Подтвердить что ты не робот

Несколько версий SQL Server с использованием Entity Framework в одном приложении ASP.NET

Я использую Entity Framework в веб-приложении, использующем SQL Server 2000, 2005 и 2008. Когда я создаю новый файл EDMX, используя что-либо, кроме 2008 (версия первого созданного edmx), я получаю error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier. It кажется, что где-то в коде соединение подключено к хранилищу данных 2008 года, и когда он проверяет файл SSDL и видит другое значение ProviderManifestToken, он выдает эту ошибку. Я немного расстроен. Трудно представить, что EF будет работать только с одной версией Sql Server для каждого приложения. Я уверен, что должна быть настройка или обходной путь. Кто-нибудь имеет решение использовать разные версии SQL-сервера и Entity Framework в одном веб-приложении?

4b9b3361

Ответ 1

Я смог выполнить это, поместив каждый 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 
              };

Ответ 2

Эта ссылка помогла мне решить проблему, когда была разница в 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-редактора". Открыть файл Entity Framework.edmx:

Измените ProviderManifestToken на 2008:

Похоже, это известная проблема для Microsoft.