首先,说一下什么是EF Core中的Transaction
Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应用于数据库。
所谓原子方式 是指对数据库的每一个操作是对立开来的,但是多个操作能合成一个整体(个人理解)。
当操作到某一步失败了,那么会触发事物的回滚,把前面成功的操作也进行撤销,为什么这一操作这么重要呢?我举个例子你就知道了
就那拿一行转账这件事情来说。正常的A给B转账X元有两步:
1. 从A的账户余额中减去X元。
2. 往B的银行账户中添加X元。
假如,第一步执行完了,第二部因为某种原因执行失败了,那么,是不是A的账户平白无故地少了X元而B并没有多X元呢?显然这种事情是不能发生的,正确的做法是,把第一步撤销,即把A账户减去的X元加上。
然而在在.Net中,如果你使用EF Core来操作数据库,这些都不用我们手动完成了,EF Core的事物完全可以帮我们完成这样的操作。
How?下面我们利用一个asp.net core webapi的例子来讲解EF Core中这种Transaction的用法。
新建一个webapi应用程序选择Asp.NET Core Web应用程序
.选择WebApi
搭建EF Core创建Model文件夹和BankContext数据库上下文,Walet钱包实体,如图:
Wallet的代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EFCoreRollback.Models { public class Wallet { public int Id { get; set; } public string Name { get; set; } public double Money { get; set; } } }