У меня есть некоторая дилемма на 2 варианта:
List<TransactionRecord> trList = new List<TransactionRecord>(){..initialize the list with transactionRecords, let say 200 record}
Вариант А:
foreach(var transaction in trList)
{
try
{
***per iteration make database call to update
UpdateToDB(transaction)
***e.g simple sql update statement without complex joining or other stuff
catch
{
Console.write("Transaction id:" + transaction.Id + "failed update");
}
}
***Will make a lot of db rountrip but every record failure is traceable
Вариант B
Define a table value parameter
@TVP_TransactionRecords TVP_TransactionRecords
Update tblTransactionRecords SET Value = tr.Value INNER JOIN TVP_TransactionRecords tr ON
tblTransactionRecords.ID = tr.ID
*** В коде
UpdateDbByTableValueParameter(trList);
**This would execute the sql directly without go through several loop
*** Обновите таблицу, передав список транзакций в качестве параметра значения таблицы, и выполните массовое обновление, присоединившись. Я полагаю, что это более целесообразно с точки зрения производительности, так как стоит всего один дБ, но если с обновлением что-то не так, я не могу отследить, какая запись стала причиной сбоя. 200 записей невозможно будет обновить, даже если произошла ошибка только одной записи.
Вы, ребята, думаете, что я должен выбрать вариант А, чтобы получить лучшую работу по техническому обслуживанию для устранения неполадок, или есть какой-то другой способ обойти вариант Б?
Я использую Dapper .net для обработки кода, кстати