前言:
数据库事务想必Web开发都十分的熟悉.
可以说是后台开发的必备技能了.
笔者在校招面试时,关于事务的问题就快要被问烂了
其无外乎
以下内容如不熟悉,请尽快复习
1.四大特性(ACID)
2.事务的传播属性
3.事务的隔离级别
4.Spring的声明式事务的原理(AOP)
5.一些具体的使用
(PS:分布式事务不在应届生事务问题之列…)
1.本地事务
EFCore的Savechanges()方法默认就是本地事务
及执行Savechanges()方法执行时会自动Commit,如果错误也能够自动进行回滚
当然,也可以手动控制本地事务
static void Main(string[] args)
{
PPDbContext context = new PPDbContext();
//在改数据库上下文中获取Transcation,
var Transcation = context.Database.BeginTransaction();
try
{
Person personOne = new Person();
personOne.Name = 33;
context.persons.Add(personOne);
Pet petOne = new Pet();
petOne.name = "mao1";
petOne.owner = personOne;
context.pets.Add(petOne);
context.SaveChanges();
//控制事务的提交
Transcation.Commit();
}
catch(Exception e)
{
//控制事务的回滚
Transcation.Rollback();
}
}
本地事务的功能有限,使用也比较简单.一般只需要注意事务失败的回滚即可
保存点(介绍)
EFCore在事务中引入了一种保存点的设置,
保存点是用来控制回滚的一种方式,及可以回滚到你设置的保存点(而不是把回滚到方法执行之前)
使用方式也很简单,这是两个API
详细用法参考:https://docs.microsoft.com/zh-cn/ef/core/saving/transactions
transcation.CreateSavePoint(String pointname