Я использую 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.
Кажется, что где-то в коде соединение подключено к хранилищу данных 2008 года, и когда он проверяет файл SSDL и видит другое значение ProviderManifestToken, он выдает эту ошибку. Я немного расстроен. Трудно представить, что EF будет работать только с одной версией Sql Server для каждого приложения. Я уверен, что должна быть настройка или обходной путь. Кто-нибудь имеет решение использовать разные версии SQL-сервера и Entity Framework в одном веб-приложении?Несколько версий SQL Server с использованием Entity Framework в одном приложении ASP.NET
ответ
Я смог выполнить это, поставив каждый 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
};
Я вижу, где это будет работать. Проблема, которую я искал, была связана с тем, почему она не работает в моей среде. В то время единственной задачей было установить все ProviderManifestToken в ту же версию. С этого момента я переместил все dbs на MSSQL 2008. Так почему это может не отвечать на мой первоначальный вопрос, это приемлемое обходное решение. –
У меня была такая же проблема. Затем я реализовал все, описанные в предложении «@Cogwheel - Matthew Orlando», и он отлично подходит как для серверов SQL Server 2005, так и для 2008 года. Примечание. Я создал новый проект для доступа к данным SQL 2008 с именем diff и затем скопировал весь контент с первого и исправил «ProviderManifestToken» для соответствующей версии sql, а затем заменил пространства имен во втором проекте - в соответствии с новым именем сборки (не знаю, если это было необходимо). И теперь я счастлив. – mastak
Любые мысли о том, как это сделать при первом использовании кода? –
Эта ссылка помогла мне для решения проблемы, когда была разница в 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 году:
Похоже, его известная проблема для Microsoft.
Спасибо человек. Я действительно боролся с этим. Другой разработчик продолжал добавлять в наш проект другой провиантский манифест. Хорошая статья –
То, что я нашел в моем случае, было у нас, у нас было 3 проекта в одном решении, и мы изменили ProviderManifestToken в одном из проектов A, и это не позволило мне запустить даже проект B из того же решения. – franklins
В моем случае мне пришлось изменить 2008 tot 2012 и внизу файла, который вы найдете:
Один из важных моментов, который стоит упомянуть, заключается в том, что я нахожусь в середине перехода от sql 2000 до sql 2008 и изменил строки подключения и, как ни странно, выполнил «Обновить модель из базы данных», если я модифицирую все SSDL для используйте ProviderManifestToken = "2005" приложение работает. –
Я тоже ищу ответ на эту проблему. Единственные релевантные результаты Google, которые я нашел до сих пор, не вникают ни в какие глубины. – Cogwheel