我已經寫了下面的一段代碼執行從多個線程表批量更新:C#不死鎖
public void BulkUpdateItems(List<Items> items)
{
var bulk = new BulkOperations();
using (var trans = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(@"connstring"))
{
bulk.Setup()
.ForCollection(items)
.WithTable("Items")
.AddColumn(x => x.QuantitySold)
.BulkUpdate()
.MatchTargetOn(x => x.ItemID)
.Commit(conn);
}
trans.Complete();
}
}
與使用SQLBulkTools庫......但這裏的問題是,當我運行此程序多個線程在同一時間我就死鎖運行...
而且錯誤指出某個進程ID被死鎖或類似的東西....
是否有任何替代執行的1批次更新從一個有效的方式從多個線程表?
有人可以幫我嗎?
'lock'不會同步多個進程,即使這樣做,數據庫也可以完全與完全不同的機器進行交互。同步需要在數據庫級別進行處理。 – Servy
@Servy,我認爲這個場景是一個進程中的多線程,不是嗎? – dsolimano
@dsolimano不,它不是。這是一個數據庫拋出錯誤,因爲與數據庫的其他一些連接的某些交互造成了死鎖。數據庫對於單個進程不是本地的。 – Servy