gpt4 book ai didi

c# - 首先将 READ_COMMITTED_SNAPSHOT 与 EF 代码结合使用 5

转载 作者:行者123 更新时间:2023-11-30 20:56:26 24 4
gpt4 key购买 nike

最近,我们的用户有时会遇到timeout expire error,当他们想要更新数据库上的一些记录时。(我认为数据库中发生了类似死锁的事情)我们的数据库是 SQL Server 2008 R2,我们的应用程序首先使用 EF5 代码开发。

今天我读了一篇关于在 SQL Server 中使用 READ_COMMITTED_SNAPSHOT 选项的文章,我认为这个选项可以帮助我们防止数据库中的死锁。根据那篇文章,它有两个步骤:

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 本身。

有没有办法在不使用 TransactionScop 语句的情况下使用 READ_COMMITTED_SNAPSHOT

最佳答案

READ_COMMITTED_SNAPSHOTSNAPSHOT_ISOLATION 不是一回事。在数据库上启用 READ_COMMITTED_SNAPSHOT 后,所有 READ COMMITTED 事务都将使用它。

SNAPSHOT_ISOLATION 是一个完全不同的隔离级别,需要像您一样在代码中调用。

进一步阅读: https://msdn.microsoft.com/en-us/library/tcbchxcb(v=vs.110).aspx

关于c# - 首先将 READ_COMMITTED_SNAPSHOT 与 EF 代码结合使用 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com