开发工具与关键技术: VisualStudio 2015 mvc
作者:杨泽平
撰写时间:2019、4、30
C# mvc项目中,在处理一些重要操作时需要用到事务,目的是保证操作一次性成功,事务Transaction:指的是要做的或所做的事情。
我们在开发的时候想要用事务,还得做一个步骤,那就是添加引用事务,因为在开发工具里默认是没有引用的,事务的添加引用步骤是:1、在开发工具打开的项目里找到项目解决方案资源管理器引用的地方;2、鼠标选择到引用右键打开添加引用;3、然后在引用管理器里面的程序集框架下面找到System.Transactions,勾上确定添加引用就行了。
添加完引用事务后我们就可以使用事务了,首先,事务它保证数据的正确性,要么都成功,要么都失败,如果执行的操作没有完成的话,事务所包含的所有操作都会回滚,也就是说会回到事务执行前的状态,而且这次操作的数据不会存留在数据库,对数据库没有影响,也不会影响其他的操作,总而言之他能提供一个从失败中恢复正常状态的方法。
而一般我们在mvc项目中事务重点用在一些比较多条件的,新增、修改、删除的方法里,在这里以一个新增为例子,
写好的方法如下图所示:(画红线的地方就是事务)
这个新增方法是一个多表新增,我需要新增一条员工信息,在进行查询跟判断之前先开启事务,把这些查询跟判断的方法用事务包裹起来,然后在这些操作完成后我们还需要通过提交事务,确保操作的一次成功。
方法完成我们来测试一下事务,我们先新增一条成功的数据,这一条就不多说了,这里新增成功后数据库表截图就以我后面测试的数据库截图为准,数据库表第一列数据为员工ID,成功的这一条为1045,那么接下来我们来测试一条不成功的数据,我们让事务包裹里面的操作报一个异常,这里我们要知道的事务包裹的操作,任何一步出现异常,事务是无法提交的,我用try{}catch(){},来捕获这个异常。
我们通过断点来看一下,上面图片可以看到断点情况,断点往下执行时,因为这是一条异常的数据,所以不会执行到提交事务的那一步,而是到异常触发的时候,直接跳到catch里面。
截图如下:
当catch执行完成后,页面会提示数据异常,然后就是操作失败,这条数据是没法在数据库保留的,他会被回滚到执行事务前的状态。
如下图所示:
最后我们看一下数据库,我们之前新增成功的一条数据它的员工ID为1045,那么我们异常的这一条数据就应该为1046,但是显然这一条异常的数据被回滚了,所以在数据库里是找不到这条数据的,我们能看到的只有上一条新增成功的数据。
如下图所示:
最后,事务有一些性质,这些性质简称为ACID性质,这些我就不多说了,详情请另行查阅。