Mas*_*oud 4 c# entity-framework transactions sql-server-2008 database-deadlocks
最近,我们的用户有时会遇到timeout expire 错误,当他们想要更新 DB 上的某些记录时。(我认为 DB 中发生了死锁之类的事情)我们的数据库是SQL Server 2008 R2,我们的应用程序首先由 EF5 代码开发。
今天我读了一篇关于READ_COMMITTED_SNAPSHOT在 SQL Server 中使用选项的文章,我认为这个选项可以帮助我们防止数据库中的死锁。根据那篇文章,它有两个步骤:
1-READ_COMMITTED_SNAPSHOT在数据库中激活
ALTER DATABASE testDatabase SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE testDatabase SET READ_COMMITTED_SNAPSHOT ON;
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
这个示例,使用了TransactionScop语句。但我们没有TransactionScop用于管理Transactions. 例如,我们的模型中有继承,当我们调用时.SaveChange(),EF创建和管理Transaction它自己。
有READ_COMMITTED_SNAPSHOT没有不用 usingTransactionScop语句的方法?
小智 6
READ_COMMITTED_SNAPSHOT并且SNAPSHOT_ISOLATION不是一回事。READ_COMMITTED_SNAPSHOT在数据库上启用后,所有READ COMMITTED事务都将使用它。
SNAPSHOT_ISOLATION 是完全不同的隔离级别,需要像您一样在代码中调用。
进一步阅读:https : //msdn.microsoft.com/en-us/library/tcbchxcb(v=vs.110).aspx
| 归档时间: |
|
| 查看次数: |
5795 次 |
| 最近记录: |