У меня есть ситуация (я догадываюсь, довольно стандартная), где мне нужно выполнить некоторые бизнес-вычисления и создать кучу записей в базе данных. Если что-то пойдет не так, в любой момент мне нужно отбросить все обратно из базы данных. Obviosly Мне нужна сделка. Мой вопрос в том, где я могу реализовать поддержку транзакций. Вот мой примерИспользование транзакций с бизнес-процессами и шаблон репозитория
//BillingServices - This is my billing service layer. called from the UI
public Result GenerateBill(BillData obj)
{
//Validate BillData
//Create a receivable line item in the receivables ledger
BillingRepository.Save(receivableItem);
//Update account record to reflect new billing information
BillingRepository.Save(accountRecord);
//...do a some other stuff
BillingRepository.Save(moreStuffInTheDatabase);
}
Если какое-либо из обновлений базы данных не удается, мне нужно отбросить остальные и выйти. Должен ли я просто выставить объект Connection через мое хранилище, в котором я могу назвать
Connection.BeginTransaction()
или я делаю, я просто проверить в слое службы и просто вызвать один метод в хранилище, которое сохраняет все объекты и обрабатывает транзакцию? Мне это кажется не совсем правильным. Похоже, что это заставило бы меня применить к бизнес-логике уровень данных.
Каков правильный подход? Что делать, если мне нужно развернуть репозитории (или это будет плохой дизайн)?
+1, хороший вопрос. –
Надеюсь, я получу хороший ответ =). На самом деле любой ответ на этот момент был бы приятным. – Micah