我正在使用TransactionScope
,這樣我就可以確定我的所有數據都被刪除了&保存或一切回滾。C#TransactionScope - 鎖定記錄問題
但是這裏的問題是我的記錄更多&它需要太多的時間來刪除記錄&另一方面記錄被鎖定爲其他用戶。
這裏是代碼: -
using (var scope = new TransactionScope())
{
using (var ctx = new ApplicationDbContext(schemaName))
{
// Delete
foreach (var item in queries)
{
// Delete queries - more than 30 queries - optimized already
ctx.Database.ExecuteSqlCommand(item);
}
// Bulk Insert
BulkInsert(ConnectionString, "Entry", "Entry", bulkTOEntry);
BulkInsert(ConnectionString, "WrongEntry", "WrongEntry", bulkWrongEntry);
}
scope.Complete();
}
的foreach
循環進行刪除操作需要&引起的記錄鎖定太多時間。如果我從TransactionScope
中取出代碼,那麼我將無法回滾。
這是什麼方法?有沒有其他方法可以加快通過類似批量刪除的刪除操作?
- 增加
DELETE FROM [Entry]
WHERE CompanyId = 1
AND EmployeeId IN (3, 4, 6, 7, 14, 17, 20, 21, 22,....100 more)
AND Entry_Date = '2016-12-01'
AND Entry_Method = 'I'
員工ID是不同ENTRY_DATE不同。對於查詢
執行計劃: -
使用存儲過程。不幸的是交易只適用於短期操作。 – buffjape
在事務之外準備一個臨時表,刪除所有要刪除的行的主鍵值,啓動一個事務併發出1條刪除語句,將它們全部刪除。但是,如果您正在執行的語句都是針對不同的表格,而這不可能。 –
當你說「太多時間」時,你的意思是什麼?我們在說毫秒嗎?秒?分鐘?小時?而「超過30」,在特定場景中有多少? 35? 350? 3500? 350萬? –