什么是实体框架的默认读锁,以及如何实现可重复读锁。
我在想,也许在某个地方有一个全局设置,以便默认情况下获取类型为可重复读取的读锁,然后在savechanges生效后释放。
这里的What is the default transaction isolation level in Entity Framework when I issue “SaveChanges()”? .Says默认隔离级别是snapshot.How,我是否可以更改为可重复读取。
发布于 2016-01-13 21:44:23
本文还提供了一个如何处理事务示例,这是您需要从隔离模式repeatable read中获得的好处。注意,他们的例子有一个非常糟糕的缺陷,因为它会吞噬任何异常。
下面是他们的例子的修正版本。context应该是从DBContext派生的类的实例。
using (var dbContextTransaction =
context.Database.BeginTransaction(
System.Data.IsolationLevel.RepeatableRead))
{
try
{
// Your work here, then
context.SaveChanges();
dbContextTransaction.Commit();
}
catch
{
dbContextTransaction.Rollback();
throw;
}
}正如Panagiotis Kanavos所警告的那样,应该尽可能避免这种锁定。它降低了可伸缩性,增加了死锁风险,可能会在事务运行时完全阻止其他用户,...
try catch rollback可以被认为是多余的,因为处理正在进行的System.Data.SqlClient.SqlTransaction会导致它回滚( using将确保它被处理)。但是,由于具体事务可能是某种其他类型的事务,这取决于所使用的数据存储,因此在失败的情况下显式回滚它会更安全。
https://stackoverflow.com/questions/34766739
复制相似问题