【发布时间】:2017-09-17 00:10:50
【问题描述】:
当我使用创建事务并锁定某个表以对其执行耗时操作的 Entity Framework 执行 SQL 查询时,当另一个应用程序尝试同时从同一个表中读取时会发生什么情况?
SQL Server 会等待第一个事务完成并在锁消失时继续执行,还是会简单地返回一个错误,指出该表不可访问?
【问题讨论】:
-
如果你想要一个排队等待的东西,你正在寻找
serializable隔离级别。 SQL Server Isolation Levels: A Series - Paul White。请注意,这不一定会锁定整个表,取决于可用的操作和索引,引擎将尝试使用键范围锁定。 Key-Range Locking - MSDN -
默认情况下,SQL Server 执行行级锁定,因此您几乎不会锁定整个表。如果您插入新行 - 是的,在插入行的事务提交之前,其他事务无法读取这些新行 - 但这并不意味着整个表必须被锁定允许插入(或更新或删除)几行!
标签: sql-server entity-framework