質問: アプリケーション: * .NET 4.5 C# * データベースの最初のアプローチでEF6を使用 * SQL Server 2008 R2、2012および2014をサポート この質問は、自動生成されたedmxファイルの`ProviderManifestToken`属性に関するものです。 `ProviderManifestToken`属性の値は、2008年または2012年に設定されます.SQL Server 2005のサポートが終了するまで、データベースのモデルを更新するために使用されるデータベースのバージョン(異なる開発者はデータベースのバージョンが異なります)この属性の値が2005のままであることを確認しました(詳細はこのSOの記事を参照してください)。 私は2008年と2012年の間に同様の懸念があるのだろうかと思っています。この属性は本当に何をしていますか?実行時に問題を起こすことなく、どちらかの値にしておくことは安全ですか?または、私たちがサポートしているデータベースのバージョンでアプリケーションが正常に動作することを確認するには、これが常に2008に設定されているか、または常に2012に設定されていることを確認する必要がありますか? MSDN.aspx)はこのプロパティの説明にはあまり役に立ちません。それは、 `ProviderManifestToken`が > 使用されているデータベースサーバーのバージョンを識別する文字列。たとえば、SQL Serverプロバイダは、SQL Server 2008に文字列 "2008"を使用します。これはNULLにはできませんが、空の場合があります。 > > ありがとう!
回答: EF 6.1.2以降、 `ProviderManifestToken`値を`2012`として設定すると、EFは`offset ... fetch ...`構文(MS Sql 2008ではサポートされていません)を使用してSQLを生成します。だから、もしあなたが`2012`に変更されるならば、あなたはMS Sql 2008上で走っているアプリに悩まされている可能性が非常に高いでしょう。 新しいSql Serverで実行するために`2008`設定するのは安全です。非推奨の機能は、v + 2まで廃止されません(vは廃止された最初のバージョンです)。申し訳ありませんが、私はこの声明の参照を見つけることができなくなりました。 各展開のターゲットDBと一致させる必要がある場合は、 この他のSOの答えが役に立ちます。 どのような場合でも`2008`に設定する場合は、開発DBがすべて`100` (SQL Server 2008)の互換性レベルに設定されていることを確認してください。残念ながら、EFデザイナーは、モデルを更新するために実行されるデータベースの互換性レベルを必ずしも守るとは限りません。そのため、 `ProviderManifestToken`値を使用すると、 `ProviderManifestToken`値が「アップグレード」され、 `ProviderManifestToken`コミットして展開された場合に問題が発生します。 自分のワークステーションでこれを再現することはできませんでした。しかし、私の会社のデベロッパーの中には、ローカルdbが`100`互換性レベルにあると主張しているものの、問題がありました。 SQL Server Management Studio(SSMS)の既定のスクリプトオプションが正しく設定されていないようです。 ( `Tools` => `Options...` => `SQL Server Object Explorer` => `Scripting` => `Script for server version` )。その場合、私は彼らにそれを変更させました。今は、望ましくない`ProviderManifestToken`値のアップグレードがなくなったと報告しています。 SSMSオプションはEFデザイナーに影響を与えてはならないので、これは私にとっては非常に奇妙に見えます。デザイナーが運営するデータベースのみがIMHOに考慮されるべきです。すでに述べたように、このオプションを調整しても、自分でこの問題を再現することはできませんでした。