最近、ユーザーがDB上のレコードを更新したいときに、タイムアウト期限切れエラーが発生することがあります.(DBでデッドロックのようなものが発生すると思います)私たちのデータベースはSQL Server 2008 R2.
今日、SQL Server でのオプションの使用に関する記事を読みましたREAD_COMMITTED_SNAPSHOT。このオプションは、DB のデッドロックを防ぐのに役立つと思います。その記事によると、次の 2 つの手順があります。
1- READ_COMMITTED_SNAPSHOTDBでアクティブ化
ALTER DATABASE testDatabase SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE testDatabase SET READ_COMMITTED_SNAPSHOT ON;
2-READ_COMMITTED_SNAPSHOTコードでオプションを使用:
using (var transactionScope =
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel= IsolationLevel.Snapshot }))
{
// update some tables using entity framework
context.SaveChanges();
transactionScope.Complete();
}
このサンプルは、TransactionScop文を使用しました。TransactionScopしかし、管理には使用しませんでしたTransactions。たとえば、モデルには継承があり、 を呼び出すと.SaveChange()、それ自体EFを作成および管理Transactionします。
ステートメントを使用READ_COMMITTED_SNAPSHOTせずに使用する方法はありますか?TransactionScop