2016-05-27 12 views
0

トランザクションを使用してデータをシステムにインポートする、長い要求があります。単一トランザクションが実行されているときに、その期間に他の要求がブロックされているそして、待機操作はトランザクションが実行されている場合でも、私は、正常にデータを読み取ることができるようにするにはどうすればよいトランザクションが実行されているときのEntity Frameworkのタイムアウト

をタイムアウトし永遠とタイムアウト例外で終わる

実行されています。

P.S.トランザクション時代には、SQL Management Studioを使用してテーブルからデータを選択できるため、SQLの悲観的なデータロックではないと思います。

+0

シナリオエンティティが適合しないため、ADO.NETでSqlBulkの使用を主張します。私は同じ問題を抱え、エンティティを使用しないことで解決しました。 –

答えて

1

Snapshot IsolationをSQLサーバーで有効にすることができます。これは、READ_COMMITTED_SNAPSHOT設定を指定すると、表示されている動作が変更されます。

長時間実行されているトランザクションは進行中ですが、ロックされている他のテーブルではなく、トランザクションが開始される前のそのテーブルの行が表示されます。データベースがコード・ファーストの移行によって作成された場合

ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON 
ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON 

これは、実際にEntity Frameworkの6のデフォルトの動作です:これを有効にするには

+0

他のデータもインポートできますか? – Gab

+0

そして、なぜ標準読み込みコミットレベルは以前のコミットされたエントリを表示せず、その代わりにアクセスをブロックしていますか? – Gab

+0

Read CommittedはRead Committedスナップショットではないので、それが違いです。スナップショットを使用すると、影響を受ける行の複数のバージョンがトランザクションの実行中に保持されます。 – Richard

関連する問題