FreeSql (二十八)事务
FreeSql实现了四种数据库事务的使用方法,脏读等事务相关方法暂时未提供。主要原因系这些方法各大数据库、甚至引擎的事务级别五花八门较难统一。
事务用于处理数据的一致性,处于同一个事务中的操作是一个UnitOfWork,要么全部执行成功,要么全部执行失败。
指定事务对象
FreeSql 提供了指定事务对象的方法,将事务对象暴露给外部;
orm.Update<xxx>().WithTransaction(指定事务).Set(a => a.Clicks + 1).ExecuteAffrows();
ISelect、IInsert、IUpdate、IDelete,都支持 WithTransaction 方法。
同线程事务
假设用户购买了价值100元的商品:
第一步:扣余额;
第二步:扣库存;
第一步成功了,到了第二步发现库存不足时,事务可以回滚,扣余额的数据将不生效。
//假设已经有了其他wiki页的IFreeSql声明
fsql.Transaction(() => {var affrows = fsql.Update<User>().Set(a => a.Wealth - 100).Where(a => a.Wealth >= 100)//判断别让用户余额扣成负数.ExecuteAffrows();if (affrows < 1) {throw new Exception("用户余额不足");//抛出异常,事务退出}affrows = fsql.Update<Goods>().Set(a => a.Stock - 1).Where(a => a.Stock > 0)//判断别让用库存扣成负数.ExecuteAffrows();if (affrows < 1) {throw new Exception("商品库存不足");//抛出异常,回滚事务,事务退出//用户余额的扣除将不生效}//程序执行在此处,说明都扣成功了,事务完成并提交
});
注意与说明:
1、数据库事务在线程挂载,每个线程只可开启一个事务连接,重复开启会获取线程已开启的事务;
2、在事务代码过程中,不可使用异步方法,包括FreeSql提供的数据库异步方法,否则线程将会切换事务不生效;
3、fsql.Transaction 有防止死锁机制,60秒事务未结束的,将会被其他线程强行提交(不是回滚),可能造成不完整的事务,但仔细一想60秒还没完成的事务是什么原因呢?如果嫌60秒太少了可以在重载方法的参数中设置;
后续我们将介绍仓储模式下的工作单元,和 DbContext 事务使用。
系列文章导航
(一)入门
(二)自动迁移实体
(三)实体特性
(四)实体特性 Fluent Api
(五)插入数据
(六)批量插入数据
(七)插入数据时忽略列
(八)插入数据时指定列
(九)删除数据
(十)更新数据
(十一)更新数据 Where
(十二)更新数据时指定列
(十三)更新数据时忽略列
(十四)批量更新数据
(十五)查询数据
(十六)分页查询
(十七)联表查询
(十八)导航属性
(十九)多表查询
(二十)多表查询 WhereCascade
(二十一)查询返回数据
(二十二)Dto 映射查询
(二十三)分组、聚合
(二十四)Linq To Sql 语法使用介绍
(二十五)延时加载
(二十六)贪婪加载 Include、IncludeMany、Dto、ToList
(二十七)将已写好的 SQL 语句,与实体类映射进行二次查询
(二十八)事务
(二十九)Lambda 表达式
(三十)读写分离
(三十一)分区分表
(三十二)Aop
(三十三)CodeFirst 类型映射
(三十四)CodeFirst 迁移说明
(三十五)CodeFirst 自定义特性
转载于:https://www.cnblogs.com/FreeSql/p/11531423.html
FreeSql (二十八)事务相关推荐
- FreeSql (十八)导航属性
导航属性是 FreeSql 的特色功能之一,可通过约定配置.或自定义配置对象间的关系. 导航属性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent ...
- 2008R2Win7管理二十八Mail之基本使用
2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...
- 微信小程序把玩(二十八)image组件
原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...
- Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容
Citrix 服务器虚拟化之二十八 XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1) 服务器桌面:发布场中服务器的整个 ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...
- SAP UI5 初学者教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
- 计算机英语翻译3000字,英语专四作文满分范文(二十八):计算机翻译
英语专四作文满分范文(二十八):计算机翻译 2015年专四考试预计4月18日开考,考生们现在应该进入紧张的冲刺复习阶段,专四作文是很多同学感到头疼的,在这里新东方在线整理了英语专四作文满分范文供考生们 ...
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过Ser ...
最新文章
- HDU1548:A strange lift(Dijkstra或BFS)
- 枚举的定义枚举类型定义
- twiiq开发随笔(2)
- jquery实现抽奖系统
- 《对马岛之魂》:“取巧”成功的佳作
- 1126 求递推序列的第N项 (Fnb + mod + 思维)
- R语言quantstrat包
- .NET/.NET Core中更清晰的堆栈跟踪
- 【操作系统】操作系统不可怕,重装系统不求人,因为我们是GISer!
- 13、play中实现信息国际化
- fritzing导入元件_超屌的 fritzing 新建元件
- 装了python3但在cmd里不识别,Pip无法识别安装命令(Windows 7,Python 3.3)
- NSIS教程(4): 调用Windows API
- 斐波那契(黄金分割法)查找算法
- 计算机教室消防说明,6.7 消防专用电话的设置
- ROMS海洋模式笔记
- OM_销售订单的四个主要环节和每个环节用到的常用表
- Windows桌面图片打开慢的原因 wyz_csdn
- Teams Tab App 分析
- L - 芜湖塔台请求起飞
热门文章
- 【HDU - 1266 】Reverse Number(模拟,数字分位数处理)
- 华为nova 7 se鸿蒙,荣耀v40和华为Nova7Pro哪个好-参数对比-更值得入手
- c 跟r语言运行速度,1. R语言运行效率分析(5)
- html表格全屏显示,tableView滑动全屏显示
- es 全量同步mysql_使用canal将mysql同步到es中
- mysql 学生成绩等级_JSP+SSM+Mysql实现的学生成绩管理系统
- 绿联怎么样_移动电源降价了,小米、京选、绿联充电宝怎么选,网友:都非常合适...
- mysql memcached java_java缓存技术memcached实例
- IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO
- leetcode57. 插入区间