C# 冲突交易

C# 冲突交易,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,当我的某些事务发生冲突时,我会出现此错误。我怎样才能找到冲突中的原因?(不带sql server探查器) 我使用的是快照隔离级别 System.Data.SqlClient.SqlException:快照隔离事务 由于更新冲突而中止。不能使用快照隔离来 直接或间接访问数据库中的表“dbo.Users” “IUMobileDbRelease”更新、删除或插入已删除的行 被其他事务修改或删除。重试事务,或 更改update/delete语句的隔离级别 System.Data.Entity.I

当我的某些事务发生冲突时,我会出现此错误。我怎样才能找到冲突中的原因?(不带sql server探查器)

我使用的是快照隔离级别

System.Data.SqlClient.SqlException:快照隔离事务 由于更新冲突而中止。不能使用快照隔离来 直接或间接访问数据库中的表“dbo.Users” “IUMobileDbRelease”更新、删除或插入已删除的行 被其他事务修改或删除。重试事务,或 更改update/delete语句的隔离级别

    System.Data.Entity.Internal.InternalContext.SaveChanges()

在EF6中,可以启用查询日志记录:

例如:

context.Database.Log = Console.Write;

将其输出与您得到的异常关联起来,将其缩小为一条语句。

您可以使用SQL Server Profiler。或扩展事件,替代探查器。更好的是,不要使用事务。改用乐观并发。这是20世纪90年代以来的标准建议。使用事务的代码无法扩展,必须始终处理死锁并重试。自20世纪90年代以来,应用程序使用乐观并发和rowversion列来检测冲突更改,而不使用事务。另一种选择是使用快照事务隔离级别,而不是可重复读取。它比乐观并发慢,但确保不会出现任何死锁,除非两个应用程序尝试修改同一行。它是哪个SQL server版本?考虑这一点:@ DLATKAIY所有当前版本都支持这个(即SQL Server 2012和更高版本)。它仍然比乐观的慢concurrency@PanagiotisKanavos我已经在使用快照隔离
    System.Data.Entity.Internal.InternalContext.SaveChanges()