Мне нужно обернуть некоторые вызовы методов, которые делают async
обновления и вставки в мою базу данных. Все методы используют этот шаблон для запуска кода:
using (IDbConnection conn = Connection)
{
conn.Open();
//TODO: Table item quantity for the QTYALLOC field
var sql = //sql statement;
int x = await conn.ExecuteAsync(sql);
return x > 0;
}
Прямо сейчас все методы возвращают boolean
. Я хочу заключить вызовы в транзакцию и зафиксировать или откатить
await [InsertRecord];
//add the audit record
var addAudit = await [Insert Audit Record];
var updateOrd = await [Update Record]
var changePickStatus = await [Update Record]
if (locs.First().QTYTOTAL - ord.QTYPICKED <= 0)
{
await [Delete Record]; //delete the record
}
else
{
//decrement the quantity for the location and update.
locs.First().QTYTOTAL -= ord.QTYPICKED;
await [Update Record]
}
. Я помещаю вызовы методов в квадратные скобки []. Прямо сейчас каждый вызов возвращает boolean
, чтобы указать, что он был успешным или неуспешным. Я хотел бы обернуть все эти вызовы в одну транзакцию для фиксации или отката в зависимости от результата каждого вызова. Я не хочу помещать все операторы SQL в один большой вызов, если я могу помочь, они длинные и сложные. Могу ли я передать транзакцию каждому вызову метода и применить ее к каждой операции ExecuteAsync
? Если это так, что бы я вернулся от метода, чтобы указать на успех или неудачу?