我有一种情况(我猜这很标准),我需要执行一些业务计算并在数据库中创建一堆记录。如果在任何时候出现任何问题,我需要从数据库中回滚所有内容。显然我需要某种交易。我的问题是我在哪里实现事务支持。这是我的例子
//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()
还是我只是在服务层中进行验证,然后在存储库中调用一种方法来保存所有对象并处理事务?这对我来说似乎不太正确。似乎它会迫使我在数据层中投入大量的业务逻辑。
什么是正确的方法?如果我需要跨越存储库(或者那将是糟糕的设计)怎么办?