我有一个控制器和一个存储库。使用EF 6
控制器文件
int userID = _myrepository.addCustomer(model)
我获得了userID
然后使用第三方插件进行付款(例如:)
var success = makePaymentThroughPaymentProcessor(userID);
现在,如果付款未通过或发生错误,我想回滚更改,以便不添加任何客户而不添加到数据库。
我尝试过使用包装存储库方法
(var transaction = objMCOEntities.Database.BeginTransaction())
{
//code...
context.SaveChanges();
return userID;
我查看https://msdn.microsoft.com/en-us/data/dn456843.aspx
但我不确定如何在调用addCustomer存储库方法后引用该事务
我可以先付款,然后将客户添加到数据库中,但如果在将客户添加到数据库时发生错误,则不会创建客户,但会付款,然后我将不得不退还客户
答案 0 :(得分:2)
如果您正在使用Entity Framework 6,则可以查看this页面。基本上你必须在tranaction.Commit()和transaction.Rollback();
之间做出选择。但我不认为在这种情况下这是非常必要的。如果您的代码中有正确的顺序(首先通过第三方工具付款,然后保存到数据库),您就不需要进行交易,但我不知道该第三方工具的具体细节。