有一次小白面试回来说,面试官问EF Core怎么实现,他当时懵逼了,之前写过但是长时间不用了,最近的事务还是用第三方封装的方法,早忘记原生的怎么写了。本文将替小白回答这个问题,而且有三种实现方法。

事务这个功能一般在批量插入或者修改多个数据表时用到,操作过程中要么都成功,要么都失败,来保证数据的一致性。使用场景比如支付转账、图书馆借书书等。EF Core有三种以上的方法实现,本文介绍比较通用的三种方法。

一、SaveChanges(默认事务)

在默认的情况下,如果使用EF的SavaChanges操作多表或多条数据的保存,它是支持事务的。当然如果不想用也可以关闭默认的事务。上代码

using (ApplicationDbContext db=new ApplicationDbContext(options)){try{//关闭SaveChanges的默认事务 事务就不会起作用// db.Database.AutoTransactionsEnabled = false;db.Customers.Add(new Customer() { Name = "梁朝伟", Age = 11, Email = "lcw@qq.com" });db.Customers.Add(new Customer() { Name = "张曼玉", Age = 55, Email = "zmy@qq.com" });db.SaveChanges();//}catch (Exception){Console.WriteLine("如果出错了,两条数据都没有执行成功");}}

二、DbContextTransaction(BeginTransaction)

BeginTransaction也是常用的事务,在ADO.NET中也可以使用(SqlBeginTransaction)。功能有开启事务、Commit提交事务、Rollback回滚事务、Dispose销毁,用Using包裹的话,就不需要写Rollback关键字,它会自动回滚。如果不用Using包裹事务,就需要在Catch中手动RollBack回滚,并且最好最后手动的Dispose一下。上代码

using (ApplicationDbContext db = new ApplicationDbContext(options)){using(var transaction= db.Database.BeginTransaction()){try{db.Customers.Add(new Customer() { Name = "梁朝伟", Age = 11, Email = "lcw@qq.com" });db.SaveChanges();db.Customers.Add(new Customer() { Name = "张曼玉", Age = 55, Email = "zmy@qq.com" });db.SaveChanges();//提交事务transaction.Commit();}catch (Exception){//回归事务,在try不需要,报错后不会提交事务//transaction.Rollback();//transaction.Dispose();}}}

三、TransactionScope(环境事务)


    TransactionScope是.Net 2.0之后的新特征,它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物。功能有Complete提交事务、 Transaction.Current.Rollback()回滚事务、Dispose销毁对象。跟BeginTransaction一样如果用Using包裹的话不需要写回滚和销毁。上代码:

using (ApplicationDbContext db = new ApplicationDbContext(options)){using (var scope = new TransactionScope()){try{db.Customers.Add(new Customer() { Name = "梁朝伟", Age = 11, Email = "lcw@qq.com" });db.SaveChanges();db.Customers.Add(new Customer() { Name = "张曼玉", Age = 55, Email = "zmy@qq.com" });db.SaveChanges();//提交事务scope.Complete();}catch (Exception){}}}

结语

上面列举了EF Core的三种事务的使用,案例是比较简单的用法,具体还有多上下文的事务、分布式事务等,由于篇幅有限大家自己可以研究一下,本案例仅供参考,具体根据您的项目来实践。再来说一下面试,问这种问题主要是考察你对代码的熟悉程度,一般长时间不用一时想不起很正常,并不代表你不会。希望本文对你有所帮助,欢迎留言和提出异议。

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。


技术群:添加小编微信并备注进群
小编微信:mm1552923   公众号:dotNet编程大全

小白面试:EF Core的三种事务相关推荐

  1. 第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)

    一. 什么是事务 我们通俗的理解事务就是一系列操作要么全部成功.要么全部失败(不可能存在部分成功,部分失败的情况). 举一个事务在我们日常生活中的经典例子:两张银行卡(甲.乙),甲向乙转钱,整个过程需 ...

  2. 第五节:EF Core中的三类事务(SaveChanges、DbContextTransaction、TransactionScope)

    一. 说明 EF版本的事务介绍详见: 第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges.DBContextTransaction.TransactionScope). 本节主 ...

  3. Java面试题之Oracle 支持哪三种事务隔离级别

    Oracle 支持三种事务隔离级别: 1.读已提交:(默认) 2.串行化: 3.只读模式 转载于:https://www.cnblogs.com/hujinshui/p/10463883.html

  4. Spring的三种事务控制

    Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...

  5. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

  6. Sql Server 三种事务模式

    显式事务 显式事务(Explicit Transaction)是由设计人员明确定义事务的启动与结束的一种事务. 可使用 BEGIN TRANSACTION.COMMIT TRANSACTION.COM ...

  7. 分布式事务讲解 - TX-LCN分布式事务框架(含LCN、TCC、TXC三种模式)

    分布式事务讲解 - TX-LCN分布式事务框架(含LCN.TCC.TXC三种模式) 分布式事务系列博客: TX-LCN框架原理 LCN 原理及主要特点 代码实现 实现场景 创建数据库及表(三个数据库, ...

  8. 什么是分布式事务Seata?Seata的几种事务模式详解

    最后更新于:2020-04-08 17:37 目录 概念 发展历程 核心组件 三种事务模式 AT模式 前提 一个分布式事务在Seata中的执行流程 Seata 的事务提交方式与 XA 协议的两段式提交 ...

  9. 查缺补漏系统学习 EF Core 6 - 数据查询

    这是 EF Core 系列的第四篇文章,上一篇文章讲述了 EF Core 中的实体迁移与数据播种. 这篇文章盘点一下 EF Core 的几种数据查询方式,内容较多分上下两篇. 点击上方或后方蓝字,阅读 ...

最新文章

  1. 【青少年编程】黄羽恒:翻译小工具 -- 利用有道翻译
  2. 关机相关(shutdown,reboot)
  3. POJ 1091 跳蚤
  4. java做a_Java编程实现A*算法完整代码
  5. rxjs里scan operator的执行研究
  6. [Win 7]Windows7 RC 简体中文版测试正式开始了哦!!
  7. 1.1.1.1校园网_Apache Flink 1.11.0 重要功能全面解析
  8. 2、SQL UNION 和 UNION ALL 操作符
  9. phpcms如何做企业站-- 替换首页最初操作
  10. js怎么获取ueditor值_UEditor获取内容
  11. 修复GRUB [转]
  12. 运动目标跟踪(八)--时空上下文(STC)跟踪原理
  13. 设计模式---中介者模式(C++实现)
  14. (转)Maven仓库——私服介绍
  15. kali linux 2020.4 自带浏览器英文改中文
  16. 压缩包修改所属目录Linux,linux文件/目录/压缩解压 操作指令
  17. 输入法出现异常???输入英文字母分隔很大???你真的会使用输入法了吗???如何高效使用输入法???微软自带输入法切换
  18. 【直觉建设】对卷积的理解
  19. 更换IP地址方式简介。
  20. Js 时间间隔计算(间隔天数)

热门文章

  1. 记那些心不安分的日子
  2. 瑞幸入局无人零售:“不安分”的挑战者
  3. Android中进程间通信(IPC)方式总结
  4. 基金业务中常见费用知识
  5. 国防军工企业信息化与信息安全概要
  6. 众筹网站项目第四天之异步请求的分页查询和模糊条件查询(2)
  7. ps ps aux 和ps -aux和 ps -ef的选择
  8. 邮箱的容量怎么算怎么看?免费邮箱容量多大?能办公用吗?
  9. 中国科学院大学计算机学院夏令营,中国科学院大学计算机网络信息中心2019年推免夏令营通知...
  10. 关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法