transactions - 如何在asp.net-core 2.0中进行交易?

标签 transactions asp.net-core-2.0

我想更新一些值,但万一失败,我需要回滚。如何在 asp.net-core-2.0 中执行此操作?

我还没有找到任何答案。这是因为还不支持吗?在这种情况下,有哪些替代方案?

最佳答案

//--INSIDE YOUR SAVE METHOD--

using (var context = new YOURContext())
{
    using (var transaction = context.Database.BeginTransaction()) //--Startind transactions
    {
        try
        {
            context.YourObject1.Add(new YourObject1 { Url = "http://blogs.msdn.com/dotnet" });
            context.SaveChanges();

            context.YourObject2.Add(new YourObject2 { Url = "http://blogs.msdn.com/visualstudio" });
            context.SaveChanges();

            // Commit transaction if all commands succeed, transaction will auto-rollback
            // when disposed if either commands fails
            transaction.Commit();
        }
        catch (Exception)
        {
            // TODO: Handle failure
        }
    }
}

注意更新,首先恢复对象,然后更新。

//--INSIDE YOU UPDATE METHOD--
...
            if (ModelState.IsValid)
            {
                using (var transaction = _context.Database.BeginTransaction())
                {
                    try
                    {
                        var dataYourObj1 = await _context.YourObj1.SingleAsync(x => x.Id == YourObj1.Id);

                        dataYourObj1.Name = obj1.Name;
                        dataYourObj1.Email = obj1.Email;
                        await _context.SaveChangesAsync();

                        var dataYourObj2 = await _context.YourObj2.SingleAsync(x => x.Id == dataYourObj2.Id);
                        dataYourObj2.field = obj2.Field;
                        await _context.SaveChangesAsync();

                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        Console.WriteLine("Error occurred." + ex);
                    }
                    return RedirectToAction(nameof(Index));
                }
            }

关于transactions - 如何在asp.net-core 2.0中进行交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253570/

相关文章:

python - 如何使用 Pyramid 事务管理器处理异常?

java - Spring事务回滚 `UPDATE`和 `INSERT`

java - 使用 AbstractTransactionalJUnit4SpringContextTests 中途提交

c# - 如何向 NET Core 2.0 的 SignalR alpha 上的所有客户端发送消息

asp.net-core-2.0 - AspNetCore Httpsys 从 webapi Appsettings 文件配置 useURLS

asp.net-core - .Net Core 2.x 重定向到错误页面

nhibernate 延迟加载使用隐式事务

database - 中止和回滚之间的区别?

asp.net - 为什么 dotnet core [Authorize] 在设置默认值时需要一个方案

c# - 从 DNX 迁移到 ASP.NET Core 2.0 时 API 丢失/更改