Я использую 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 в одном веб-приложении?
Несколько версий SQL Server с использованием Entity Framework в одном приложении ASP.NET
Ответ 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.