我有一个很长的请求,即使用事务将数据导入系统。问题是当单个事务正在运行时,在该时间段内对其正在使用的表的其他请求被阻止并且永远在运行并以超时例外
等待操作超时
即使事务在那里运行,我如何才能正常读取数据。
P.S。我不认为这是一个SQL悲观数据锁,因为在事务期间我可以使用SQL Management Studio从表中选择数据。
答案 0 :(得分:1)
您可以在SQL Server中启用Snapshot Isolation,这与设置READ_COMMITTED_SNAPSHOT设置一起将改变您所看到的行为。
在长时间运行的事务正在进行中,而不是其他表被锁定时,它们将在事务开始之前看到该表中的行。
启用此功能:
ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON
如果您的数据库是由代码优先迁移创建的,那么这实际上是Entity Framework 6中的默认行为。