我有一個循環插入記錄到數據庫(火鳥):添加事務範圍,以Parallel.Foreach
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
taskList.Add(Task.Factory.StartNew(() =>
{
Parallel.ForEach(objectList, c =>
{
DoInsert(c, id);
});
}));
scope.Complete()
}
我想如果插入失敗回滾這些插入作爲一個批次的能力。但是,當我在Parallel.Foreach循環中執行插入操作時,事務範圍不可見。我假設這是因爲循環在不同的線程中運行。如果我使用TransactionScope作爲串行插入操作,則一切正常。
我試過使用DependentTransaction,但我似乎無法獲取上下文到DoInsert函數。 DoInsert只是打開一個連接並將C的內容寫入數據庫。
任何想法?
感謝,
是不是將TransactionScope綁定到Connection? –
@JeroenvanLangen,不,你正在考慮[SqlTransaction](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx),[TransactionScope](http:// msdn。 microsoft.com/en-us/library/system.transactions.transactionscope.aspx)是不同的。 –