Linq中的事务边界在运行查询后锁定表?

| 我有一个使用LinqToSql的多线程应用程序。我需要做的一件事是代表一个线程抓一堆行,例如:
dataContext.Connection.BeginTransaction()
var available = MyThings.Where(t => t.IsAvailable).Take(numberToTake);
// other validation stuff happens here, then:
foreach (var t in available) {
  t.IsAvailable = false;
  t.GrabbedBy = this;
  dataContext.SubmitChanges();
}
dataContext.Connection.CommitTransaction();
麻烦的是,第2行中的查询似乎没有锁定
MyThings
表,因为其他线程似乎能够捕获此线程已捕获的相同行,这显然不是一件好事。我不能在此块周围放置代码锁,因为不同的线程可能正在不同的内存空间(甚至可能是不同的计算机)中运行。但是我确实需要能够使用数据库级事务边界锁定那些行,以防止其他人在我执行验证工作时抓住它们。 有没有使用LinqToSql进行此操作的内置方法,而没有对这些行进行“虚拟”更新,以使我在事务边界中牢牢掌握它们?     
已邀请:
        您需要指定IsolationLevel     

要回复问题请先登录注册