2014-12-22 2 views
4

Применение:ProviderManifestToken 2008 или 2012

  • .NET 4.5 C#
  • Использование Ef6 с базой данных первого подхода
  • Поддержка SQL Server 2008R2, 2012 и 2014

Этот вопрос о атрибут ProviderManifestToken автогенерированного файла edmx.

В зависимости от того, какая версия базы данных используется (разные разработчики имеют разную версию базы данных) для обновления модели из базы данных, значение атрибута ProviderManifestToken либо устанавливается в 2008, либо в 2012 году. До тех пор, пока мы не прекратим поддержку SQL Server 2005 мы убедились, что значение этого атрибута осталось в 2005 году (см. this SO article для получения дополнительной информации).

Мне интересно, существуют ли подобные проблемы в период с 2008 по 2012 год. Что делает этот атрибут действительно? Для меня безопасно оставить это значение без каких-либо проблем во время выполнения? Или я должен удостовериться, что это всегда установлено на 2008 год или всегда установлено на 2012 год, чтобы убедиться, что приложение отлично работает с версиями поддерживаемой нами базы данных?

MSDN не очень полезна для описания этого имущества. В нем говорится, что ProviderManifestToken является

Строка, которая определяет, что версия сервера баз данных является используется. Например, поставщик SQL Server использует строку «2008» для SQL Server 2008. Это не может быть пустым, но может быть пустым.

Спасибо!

+1

У меня есть некоторая информация здесь: http://escrow.aliexpress.com : //erikej.blogspot.dk/2014/12/a-breaking-change-in-entity-framework.html – ErikEJ

ответ

6

Так как EF 6.1.2, имеющий 2012 как ProviderManifestToken значение будет вызывать EF для генерации SQL, используя offset ... fetch ... синтаксис (не поддерживается в MS SQL 2008) в кучу случаев, как пейджинг. Так что, если вы позволите ему переодеться в 2012, то очень вероятно, есть проблемы на приложениях, работающих над MS Sql 2008.

Установка его 2008 для работы на новой Sql Server должен быть безопасным для теперь: устаревшие функции, как правило, не отбрасывается до v + 2 (где v - первая версия, в которой они устарели). Извините, я больше не могу найти ссылку для этого заявления.

Если вам нужно, чтобы он соответствовал целевой БД для каждого вашего развертывания, this other SO answer может вам помочь.

Если вы хотите установить его как 2008 в любом случае, убедитесь, что для всех БД разработки установлено значение 100 (SQL Server 2008) уровень совместимости должен сделать трюк. К сожалению, похоже, что дизайнер EF не всегда соблюдает уровень совместимости базы данных, на которой он запускается для обновления модели. Поэтому при его использовании он может «обновить» значение ProviderManifestToken, вызывая проблемы, если разработчик его совершит и позволит ему развернуться.

Я не смог воспроизвести это на своей рабочей станции. Но у некоторых разработчиков моей компании были проблемы, хотя они заявляют, что их местная база данных находится в 100 уровне совместимости.

Похоже, что они не установили правильную настройку скриптов SQL Server Management Studio (SSMS) по умолчанию. (Tools =>Options... =>SQL Server Object Explorer =>Scripting =>Script for server version). На всякий случай, я заставил их изменить его, и на данный момент они сообщают, что больше не имеют нежелательного обновления ProviderManifestToken.

Это выглядит довольно странно для меня, поскольку параметры SSMS не должны влиять на конструктор EF. Следует учитывать только базу данных, на которой запускается конструктор IMHO. И, как уже было сказано, я сам не смог воспроизвести эту проблему, даже изменив этот вариант.

Смежные вопросы