从EF获取数据会保持锁定直到执行SaveChanges吗?我只是想在不改变数据的情况下读取数据。
许多用户正在访问同一个表并对其进行更改(数百名用户)。
我阅读了有关并发,SNAPSHOT转换等的帖子。但我只想知道读取数据然后执行长逻辑,它们是否一直保持锁定直到请求完成。
var lst = db.Emps.Where(e=> e.FirstName == "John" && e.Kids.Any(k=>k.FirstName == "Tim").ToList();
.
.
.
添加AsNoTracking会有什么不同(关于LOCKING问题)?
var lst = db.Emps.AsNoTracking().Where(e=> e.FirstName == "John" && e.Kids.Any(k=>k.FirstName == "Tim").ToList();
.
.
.
答案 0 :(得分:0)
不,AsNoTracking
仅禁用自动检测您对实体执行的更改。这就是全部。您可能想要使用Transactions
public static void WithTransaction(DbContext ctx, Action fn) {
ctx.Database.Connection.Open();
using (var transaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable))
{
fn();
transaction.Commit();
}
ctx.Database.Connection.Close();
}