gpt4 book ai didi

.net - ProviderManifestToken 2008 或 2012

转载 作者:行者123 更新时间:2023-12-02 23:18:40 26 4
gpt4 key购买 nike

应用:

  • .NET 4.5 C#
  • 使用 EF6 和数据库优先方法
  • 支持 SQL Server 2008R2、2012 和 2014

此问题与自动生成的 edmx 文件的 ProviderManifestToken 属性有关。

根据使用哪个版本的数据库(不同的开发人员有不同的数据库版本)从数据库更新模型,ProviderManifestToken 属性的值设置为 2008 或 2012在我们停止对 SQL Server 2005 的支持之前,我们确保此属性的值保持为 2005(有关详细信息,请参阅 this SO article)。

我想知道 2008 年和 2012 年之间是否存在类似的问题。这个属性的真正作用是什么?我将其保留为任一值是否安全,不会在运行时引起任何问题?或者我应该确保始终设置为 2008 或始终设置为 2012,以确保应用程序能够与我们支持的数据库版本正常工作?

MSDN对于描述此属性不是很有用。它指出 ProviderManifestToken

A string that identifies that version of the database server being used. For example, the SQL Server provider uses the string "2008" for SQL Server 2008. This cannot be null but may be empty.

谢谢!

最佳答案

自 EF 6.1.2 起,将 2012 作为 ProviderManifestToken 值将导致 EF 使用 offset ... fetch ... 生成 SQL语法(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) 默认脚本选项。 (工具 => 选项... => SQL Server 对象资源管理器 => 脚本 => 服务器版本的脚本)。为了以防万一,我让他们更改了它,目前他们报告不再有不需要的 ProviderManifestToken 值升级。

这对我来说看起来很奇怪,因为 SSMS 选项不应该对 EF 设计器产生任何影响。恕我直言,仅应考虑运行设计器的数据库。正如已经说过的,即使通过调整该选项,我自己也无法重现这个问题。

关于.net - ProviderManifestToken 2008 或 2012,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com