EF Core利用Transaction对数据进行回滚保护

首先,说一下什么是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应用程序

clip_image002[1]

选择Asp.NET Core Web应用程序

clip_image004[1]

.选择WebApi

搭建EF Core

创建Model文件夹和BankContext数据库上下文,Walet钱包实体,如图:

clip_image006[1]

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; } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxjps.html