我是靠谱客的博主 单纯夏天,这篇文章主要介绍小白面试:EF Core的三种事务,现在分享给大家,希望可以做个参考。

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

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

一、SaveChanges(默认事务)

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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一下。上代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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包裹的话不需要写回滚和销毁。上代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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的三种事务的使用,案例是比较简单的用法,具体还有多上下文的事务、分布式事务等,由于篇幅有限大家自己可以研究一下,本案例仅供参考,具体根据您的项目来实践。再来说一下面试,问这种问题主要是考察你对代码的熟悉程度,一般长时间不用一时想不起很正常,并不代表你不会。希望本文对你有所帮助,欢迎留言和提出异议。

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


复制代码
1
复制代码
1
2
技术群:添加小编微信并备注进群 小编微信:mm1552923   公众号:dotNet编程大全

最后

以上就是单纯夏天最近收集整理的关于小白面试:EF Core的三种事务的全部内容,更多相关小白面试:EF内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部