Entity Frameworkのメモリへのアクセスに制限はありますかOLTP Tables?それとも不可能ですか?
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)を使用しているため、これはそれほど驚くべきことではありません。