【发布时间】:2017-03-29 07:33:59
【问题描述】:
当我的一些交易发生冲突时,我遇到了这个错误。我怎样才能找到冲突中的thansaction? (没有 sql server profiler)。
我正在使用快照隔离级别
System.Data.SqlClient.SqlException:快照隔离事务 由于更新冲突而中止。您不能使用快照隔离来 在数据库中直接或间接访问表“dbo.Users” 'IUMobileDbRelease' 更新、删除或插入已被删除的行 被另一个事务修改或删除。重试交易或 更改更新/删除语句的隔离级别。
System.Data.Entity.Internal.InternalContext.SaveChanges()
【问题讨论】:
-
您使用 SQL Server Profiler。或者扩展事件,替代分析器。更好的是,只是不要使用事务。请改用乐观并发。这是自 1990 年代以来的标准建议。使用事务的代码无法扩展并且将总是必须处理死锁和重试。自 1990 年代以来,应用程序使用乐观并发和行版本列来检测冲突更改而不使用事务
-
另一种选择是使用 SNAPSHOT 事务隔离级别而不是可重复读取。它比乐观并发慢,但可以确保您不会遇到任何死锁,除非两个应用程序尝试修改同一行
-
它是哪个 SQL Server 版本?考虑一下:stackoverflow.com/a/33272566/1132334
-
@dlatikay 所有当前版本都支持此功能(即 SQL Server 2012 及更高版本)。它仍然比乐观并发慢
-
@PanagiotisKanavos 我已经在使用快照隔离
标签: c# sql-server entity-framework