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进行此操作的内置方法,而没有对这些行进行“虚拟”更新,以使我在事务边界中牢牢掌握它们?     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)