Entity Framework教程-事务(Transaction)

news/2024/7/5 3:13:37

更新记录
转载请注明出处:
2022年10月21日 发布。
2022年10月10日 从笔记迁移到博客。

EF中的事务说明

EF支持开箱即用的事务,无需复杂的配置

默认事务(Default Transaction)

只需要执行SaveChanges()一次,将会自动执行事务

只在事务执行成功的情况下保存更改,否则事务将自动回滚

比如:

更改了多个Entity

只需要执行SaveChanges()一次就可以实现多个表的更新

​ 如果执行失败,则全部回滚(rolled back automatically)

如果执行成功,则直接提交到数据库中(executed successfully)

手动事务(Creating a simple transaction)

相关API

开启事务

使用EF上下文context对象的Database对象的BeginTransaction()方法

var transaction = Context.Database.BeginTransaction()

提交事务

context.SaveChangesAsync(); //记得还是要保存修改哟
//提交事务
transaction.Commit();
transaction.CommitAsync();

回滚事务

//回滚事务
transaction.Rollback();
transaction.RollbackAsync();

创建保存点

//创建保存点
transaction.CreateSavepoint("Save1");
transaction.CreateSavepointAsync("Save1");

恢复到保存点

//恢复到保存点
transaction.RollbackToSavepoint("Save1");
transaction.RollbackToSavepointAsync("Save1");

释放保存点

//释放保存点
transaction.ReleaseSavepoint("Save1");
transaction.ReleaseSavepointAsync("Save1");

检测是否支持保存点功能

//检测是否支持保存点功能
if(transaction.SupportsSavepoints)
{
    Console.WriteLine("Support Savepoints");
}
else
{
    Console.WriteLine("Not Support Savepoints");
}

获得事务的Id

//获得事务的Id
Console.WriteLine(transaction.TransactionId);

使用using语句

使用using语句的好处:自动控制事务执行失败回滚,无需手动设置回滚

using (var transaction = dbContext.Database.BeginTransaction())
{
    //do something......

    //提交事务
    transaction.Commit();
    transaction.CommitAsync();
}

自己把控提交和回滚

using(PandaDbContext dbContext = new PandaDbContext())
{
    var transaction = dbContext.Database.BeginTransaction();
    try
    {
        //do something......

        //执行成功,提交事务
        transaction.Commit();
        transaction.CommitAsync();
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
        //执行失败,进行回滚
        transaction.Rollback();
    }
    finally
    {
        transaction = null;
    }
}

http://lihuaxi.xjx100.cn/news/98258.html

相关文章

Uber:Java中的不稳定单元测试处理

Flaky Tests介绍 单元测试是任何持续集成(CI)系统的基石。在合并之前,它向软件工程师警告新实施的代码的错误和现有代码的回归。这在软件开发生命周期的早期就能发现bug,从而确保提高软件的可靠性,也提高了整个开发人…

C语言 - 你一定能看懂的三子棋详解(万字长文,傻瓜式解析)

三子棋详解 文章目录一.写在前面二.效果预览三.整体思路四.开始制作1. 打印游戏菜单2.用 do while 语句实现玩家作出选择3.进入游戏4.打印一个 3*3 的棋盘5.对战开始6.判断输赢一.写在前面 ☀️1.制作目的: 三子棋是一个有趣的小游戏,我们在学习编程中尝…

数说故事车企数字化转型案例分享——社媒营销投放哪个平台最佳?

一方面是不断推陈出新的社媒平台,各大平台对用户流量正在上演前所未有的争夺战,算法、玩法天天“迭代”,套路永远追不上变化;另一方面是“扑朔迷离”的消费者需求,你永远不知道TA最愿意“下单”的原因是什么。 数说故…

Spring—拦截器和过滤器介绍

介绍 过滤器(Filter) 过滤器是Java Web中奖传入的request、response提前过滤掉一些信息或提前设置一些参数,然后再传入到Servlet或action进行业务逻辑处理。如过滤非法url、过滤非法字符等。过滤器依赖于servlet容器,可以对几乎…

【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】

【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】 知识回顾: 之前我们讲过的设计模式在这里呦: 【面试最常见的设计模式之单例模式】 【面试最常见的设计模式之工厂模式】 【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】 【Java中23种…

【day11】最近公共祖先最大连续bit数

最近公共祖先__牛客网 求父节点:父节点 孩子节点/2 (1)输入a ,b 如果ab,表示ab的公共祖先就是ab本身 (2)如果ab不相同,循环while哪个大,哪个除以2,直到相…

关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)

目录 Linux简介 VM虚拟机的介绍及安装 VM简介 VM安装(详细步骤,根据图片一步一步进行安装) 查看IP配置IP 换源 1)备份Linux自带的EPEL源 2)生成阿里源 3) 清空缓存 4) 重新生成缓存 Linux…

职业转型|经济低迷期转型产品管理职业的五大建议

当前的经济低迷使许多人开始重新评估当前的工作并重新考虑新的职业道路。产品管理是一个非常热门的职业发展方向,受到了求职者们广泛的关注,但于此同时,这也加剧了这个领域的竞争。产品管理的进入门槛本就并不低,在经济衰退期间&a…