我在 Web 应用程序中使用实体框架,并且有一段代码与事务中的数据库通信,如下所示:
using (DbContextTransaction transScope = ctx.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
// some code here.
transScope.Commit();
}
隔离级别Serializable,从我读到的应该是最高级别的隔离,甚至阻止读取在此事务期间访问过的记录(这是我需要的)。
但是,当我通过另一个与 SSMS 的连接访问 SQL Server 时(在此事务执行期间),我能够访问此事务读取的行。
所以,我想知道的是:事务范围和隔离级别仅对当前连接有效,还是对所有到数据库的连接都有效?
已编辑
我试图阻止的是:
请求 A 读取数据库中 id 为 1 的记录。C 列的值为 10。
请求 B 读取数据库中的相同记录。C 列的值为 10。
请求 A 使用值 C = 11 更新记录。
请求 B 使用值 C = 11 更新记录。
在这种情况下,最终值将是 11,但它应该是 12。
森栏
相关分类