2014-12-22 97 views
4

應用:ProviderManifestToken 2008年或2012年

  • .NET 4.5 C#
  • 用途EF6與數據庫第一種方法
  • 支持SQL Server 2008 R2,2012年和2014年

這個問題是關於自動生成的edmx文件的ProviderManifestToken屬性。

根據使用哪個版本的數據庫(不同的開發人員具有不同版本的數據庫)從數據庫更新模型,ProviderManifestToken屬性的值要麼設置爲2008或2012.直到我們停止了對SQL Server 2005中,我們確保此屬性的值保持爲2005(有關更多信息,請參閱this SO article)。

我想知道在2008年和2012年之間是否有類似的擔憂。這個屬性真的做了什麼?對我來說,保持它的價值不會在運行時造成任何問題是安全的?或者我應該確保它始終設置爲2008或始終設置爲2012,以確保該應用程序對我們支持的數據庫版本正常工作?

MSDN在描述這個屬性時不是很有用。它指出ProviderManifestToken

一個字符串,標識使用的數據庫服務器的版本是 。例如,SQL Server提供程序使用字符串「2008」作爲SQL Server 2008的 。它不能爲空,但可能爲空。

謝謝!

+1

我這裏有一些信息:HTTP ://erikej.blogspot.dk/2014/12/a-breaking-change-in-entity-framework.html – ErikEJ

回答

6

由於EF 6.1.2,2012ProviderManifestToken值會導致EF使用offset ... fetch ...語法(MS Sql 2008中不支持)在一些情況下(如分頁)生成SQL。 所以,如果你讓它變爲2012,你將很可能對運行在MS SQL 2008年

應用程序將其設置爲2008較新的SQL Server上運行的煩惱應該現在是安全的:不贊成使用的功能通常是直到v + 2(其中v是它們已被棄用的第一個版本)纔會被刪除。對不起,我無法找到本聲明的參考。

如果您需要使其與每個部署的目標數據庫匹配,則this other SO answer可能會對您有所幫助。

如果您希望在任何情況下將其設置爲2008,請確保開發數據庫全部設置爲100(SQL Server 2008)兼容性級別應該有所裨益。 不幸的是,它看起來像EF設計人員並不總是遵守它所運行的數據庫的兼容級別來更新模型。因此,在使用它時,它可能會「升級」值,如果開發人員提交併讓其部署,則會造成麻煩。

我無法在自己的工作站上重現這一點。但是我公司的一些開發者遇到了麻煩,儘管他們聲稱他們的本地數據庫的兼容性級別爲100

看起來他們沒有正確設置他們的SQL Server Management Studio(SSMS)默認腳本選項。 (Tools =>Options... =>SQL Server Object Explorer =>Scripting =>Script for server version)。以防萬一,我讓他們改變它,現在他們報告沒有更多的價值升級不受歡迎的東西。

這對我來說看起來很奇怪,因爲SSMS選項不應該對EF設計師有任何影響。只有運行設計者的數據庫應該被考慮進來,恕我直言。如前所述,即使通過調整該選項,我也無法自己再現這種麻煩。