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 (二十八)事务相关推荐

  1. FreeSql (十八)导航属性

    导航属性是 FreeSql 的特色功能之一,可通过约定配置.或自定义配置对象间的关系. 导航属性有 OneToMany, ManyToOne, ManyToMany, OneToOne, Parent ...

  2. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

  3. 微信小程序把玩(二十八)image组件

    原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...

  4. Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容

    Citrix 服务器虚拟化之二十八  XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务器的整个 ...

  5. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  6. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  7. SAP UI5 初学者教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  8. 计算机英语翻译3000字,英语专四作文满分范文(二十八):计算机翻译

    英语专四作文满分范文(二十八):计算机翻译 2015年专四考试预计4月18日开考,考生们现在应该进入紧张的冲刺复习阶段,专四作文是很多同学感到头疼的,在这里新东方在线整理了英语专四作文满分范文供考生们 ...

  9. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过Ser ...

最新文章

  1. HDU1548:A strange lift(Dijkstra或BFS)
  2. 枚举的定义枚举类型定义
  3. twiiq开发随笔(2)
  4. jquery实现抽奖系统
  5. 《对马岛之魂》:“取巧”成功的佳作
  6. 1126 求递推序列的第N项 (Fnb + mod + 思维)
  7. R语言quantstrat包
  8. .NET/.NET Core中更清晰的堆栈跟踪
  9. 【操作系统】操作系统不可怕,重装系统不求人,因为我们是GISer!
  10. 13、play中实现信息国际化
  11. fritzing导入元件_超屌的 fritzing 新建元件
  12. 装了python3但在cmd里不识别,Pip无法识别安装命令(Windows 7,Python 3.3)
  13. NSIS教程(4): 调用Windows API
  14. 斐波那契(黄金分割法)查找算法
  15. 计算机教室消防说明,6.7 消防专用电话的设置
  16. ROMS海洋模式笔记
  17. OM_销售订单的四个主要环节和每个环节用到的常用表
  18. Windows桌面图片打开慢的原因 wyz_csdn
  19. Teams Tab App 分析
  20. L - 芜湖塔台请求起飞

热门文章

  1. 【HDU - 1266 】Reverse Number(模拟,数字分位数处理)
  2. 华为nova 7 se鸿蒙,荣耀v40和华为Nova7Pro哪个好-参数对比-更值得入手
  3. c 跟r语言运行速度,1. R语言运行效率分析(5)
  4. html表格全屏显示,tableView滑动全屏显示
  5. es 全量同步mysql_使用canal将mysql同步到es中
  6. mysql 学生成绩等级_JSP+SSM+Mysql实现的学生成绩管理系统
  7. 绿联怎么样_移动电源降价了,小米、京选、绿联充电宝怎么选,网友:都非常合适...
  8. mysql memcached java_java缓存技术memcached实例
  9. IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO
  10. leetcode57. 插入区间