c# - 保存更改后回滚

标签 c# asp.net asp.net-mvc

我有一个 Controller 和一个存储库。使用 EF 6

Controller 文件

int userID = _myrepository.addCustomer(model)

获取用户ID

然后使用第三方插件进行支付(例如:)

var success = makePaymentThroughPaymentProcessor(userID);

现在,如果付款没有通过或发生错误,我想回滚更改,这样就不会将客户添加到数据库中。

我尝试使用包装存储库方法

(var transaction = objMCOEntities.Database.BeginTransaction())
{
//code...
context.SaveChanges();
return userID;

我查看https://msdn.microsoft.com/en-us/data/dn456843.aspx

但我不确定在调用 addCustomer 存储库方法后如何引用事务

我可以先付款,然后再将客户添加到数据库,但如果在将客户添加到数据库时发生错误,则不会创建客户,但会进行付款,然后我将不得不退还客户

最佳答案

如果您使用的是 Entity Framework 6,则可以查看 this 页面。基本上你必须在 tranaction.Commit() 和 transaction.Rollback() 之间做出选择;

但我认为在这种情况下这真的没有必要。如果您的代码中有正确的顺序(首先通过第三方工具付款,然后保存到数据库),您并不完全需要交易,但我不知道这个第三方工具的细节。

关于c# - 保存更改后回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37583558/

相关文章:

asp.net-mvc - 适用于 asp.net MVC 和 razor View 的免费 UI 模板

javascript - 使用ajax mvc搜索数据时如何在查询字符串上保留id

c# - Rx.NET "gate"运算符

CFB 中的 C# AES 加密,其中明文长度等于加密长度

c# - 检测客户端和服务器的 IP 地址

c# - 根据文本到语音的输出突出显示文本。在 Asp.net C#

c# - 将消息从 Azure 服务总线队列发送到新的 asb 队列

c# - 将一个集合中的所有项目与另一个集合中的项目进行比较?

c# - VS 2008 中未定义的 Web.config 错误

c# - 浏览器是否缓存动态图像?