问题描述
public void InsertData() {
...
try {
context.BulkInsert(Table1Data);
context.BulkInsert(Table2Data);
context.BulkInsert(Table3Data);
context.BulkInsert(Table4Data);
}
catch (Exception ex) {
Console.WriteLine("Data Failed to insert");
}
}
假设在插入“Table2Data”时发生异常。如果是这样,那么数据库已经插入了“Table1Data”,但由于异常现在不会插入“Table3Data”或“Table4Data”。
无论“Table2Data”是否工作,我都需要插入“Table3Data”和“Table4Data”。
处理这个问题的最佳方法是什么?我可以在我的异常中添加类似 goto 语句的内容,以便它继续插入吗?我主要希望避免将每个 BulkInsert 放入自己的 try catch 中。
解决方法
为什么没有这样的代码:
public void InsertData() {
...
foreach(var x in new[]{Table1Data,Table2Data,Table3Data,Table4Data})
try {
context.BulkInsert(x);
}
catch {
Console.WriteLine("Data failed to insert");
}
}
,
您可能可以从外部传递表数据作为参数,或者使用 finally 块,其中基于您的 try 代码失败/通过的 if 条件,进行递归调用?