web-dev-qa-db-ja.com

Entity Frameworkはメモリ内にアクセスできますか?OLTPテーブル?

Entity Frameworkのメモリへのアクセスに制限はありますかOLTP Tables?それとも不可能ですか?

2
user158823

Entity FrameworkからIMOLTPテーブルへのアクセスに問題がないかどうかを確認するために、小さなテストアプリケーションを作成しました。テストアプリケーションでは、最新の安定したバージョンのEntity Framework(EF6)を使用しています。

デフォルト設定では、最初にメモリ最適化テーブルに行を挿入しようとするとこのエラーが発生しました。

SqlException:READ COMMITTED分離レベルを使用したメモリ最適化テーブルへのアクセスは、自動コミットトランザクションでのみサポートされています。明示的または暗黙的なトランザクションではサポートされていません。 WITH(SNAPSHOT)などのテーブルヒントを使用して、メモリ最適化テーブルにサポートされている分離レベルを提供します。

これは、Entity Framework 「SaveChanges()」メソッドを使用すると、明示的なトランザクションが自動的に作成される (行を挿入するための最も一般的なアプローチ)であるためです。

Entity Frameworkのすべてのバージョンで、SaveChanges()を実行してデータベースで挿入、更新、または削除を行うと、フレームワークはその操作をトランザクションでラップします。

EFの場合にこれを回避する最も簡単な方法は、データベースレベルのオプション_MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT_をオンにすることです。これにより、必要なWITH (SNAPSHOT)ヒントが自動的に追加されます。

_ALTER DATABASE [YourDatabaseName] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;
_

それ以外は、インメモリテーブルへのアクセスに問題はないようです。 Entity FrameworkはSQL Server用の.NET Frameworkデータプロバイダー(SqlClient)を使用しているため、これはそれほど驚くべきことではありません。

5
Josh Darnell