2017-09-08 1 views
0

特にEntityFrameworkで使用されるProviderManifestsは、特にOracleとSQL Serverで下位互換性がありますか?Entity FrameworkでのProviderManifestsの下位互換性

私は、DbModel.Build()に渡すDbProviderInfoクラスのインスタンスを作成しています。コンストラクタの2番目の引数はProviderManifestTokenです。

が使用されているデータベース・サーバのバージョンを識別する文字列:documentationとして

はProviderManifestTokenである、と言います。たとえば、SQL Serverプロバイダは、 SQL Server 2008の場合、文字列 "2008"を使用します。これはnullにはできませんが、空の場合があります。

関連する未解決の質問hereには、ProviderManifestInfoの機能を尋ねるメッセージがあります。 Read this pageから、私は、データベースプロバイダを使用して、データベース接続を使用せずに返すProviderManifestのバージョンを判断できることを理解しています。

実験的に、問題なくProviderManifestTokenが「11.2」のOracle 12データベースを使用できることがわかりました。しかし、これは一般的に真実であると思われますか?たとえば、ProviderManifestTokenとして「2008」を渡してSQL Server 2012を使用している場合、「もの」が正常に動作すると期待できますか?

私はこの時点でドキュメントを見つけることができませんでした。物事がプロバイダごとに異なる場合、私は驚くことはありません。

答えて

0

これは一般的に正しいと思われますか?たとえば、ProviderManifestTokenとして「2008」を渡してSQL Server 2012を使用している場合、「もの」が正常に動作すると期待できますか?

はい、データベースプロバイダの下位互換性があります。 OracleとSQL Serverは、少なくとも新しいバージョンのデータベースで既存のアプリケーションを中断することを非常に気にしないため、古いバージョン用に作成されたアプリケーションは正常に動作します。

ProviderManifestTokenの主な目的は、古いバージョンのサポートを放棄することなく、EFがデータベースプロバイダに新しい機能を使用できるようにすることです。たとえば、SQL ServerではSQL 2012でOFFSET .. FETCHページングが導入されました。また、ProviderManifestTokenを使用しない場合、EFはページングに古いクエリフォーム(ROW_NUMBER()ベース)を使用するか、SQL 2008のサポートをドロップするかを選択する必要があります。

It EFが後のバージョンで正しく動作しないクエリを生成する可能性があります。これはEFのバグです。しかし、私はそのような事件については知らない。