最近,我们的用户有时会遇到超时过期错误,当他们想要更新数据库上的某些记录时。(我认为数据库中发生了死锁之类的事情)我们的数据库是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;
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
语句的方法使用?