簡體   English   中英

Linq 中的事務邊界在運行查詢后鎖定表?

[英]Transaction boundary in Linq to lock table after running query?

我有一個使用 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表,因為其他線程似乎能夠抓取該線程已抓取的相同行,這顯然不是一件好事。 我不能在這個塊周圍設置密碼鎖,因為不同的線程可能在不同的 memory 空間中運行,甚至可能在不同的計算機中運行。 但是我確實需要能夠使用數據庫級別的事務邊界來鎖定這些行,以防止其他人在我進行驗證時抓住它們。

是否有任何內置方法可以使用 LinqToSql 執行此操作,而不是對這些行進行“虛擬”更新以鞏固我在事務邊界中對它們的控制?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM