不使用AsNoTracking会锁定表吗?

时间:2016-03-15 11:22:23

标签: sql-server entity-framework

从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();
.
.
.

1 个答案:

答案 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();
}