做电商网站的步骤,企业网站建设浩森宇特,直播间 网站建设,宁波网站建设制作的公司FreeSql实现了四种数据库事务的使用方法#xff0c;脏读等事务相关方法暂时未提供。主要原因系这些方法各大数据库、甚至引擎的事务级别五花八门较难统一。 事务用于处理数据的一致性#xff0c;处于同一个事务中的操作是一个UnitOfWork#xff0c;要么全部执行成功#xf… FreeSql实现了四种数据库事务的使用方法脏读等事务相关方法暂时未提供。主要原因系这些方法各大数据库、甚至引擎的事务级别五花八门较难统一。 事务用于处理数据的一致性处于同一个事务中的操作是一个UnitOfWork要么全部执行成功要么全部执行失败。 指定事务对象 FreeSql 提供了指定事务对象的方法将事务对象暴露给外部 orm.Updatexxx().WithTransaction(指定事务).Set(a a.Clicks 1).ExecuteAffrows(); ISelect、IInsert、IUpdate、IDelete都支持 WithTransaction 方法。 同线程事务 假设用户购买了价值100元的商品 第一步扣余额 第二步扣库存 第一步成功了到了第二步发现库存不足时事务可以回滚扣余额的数据将不生效。 //假设已经有了其他wiki页的IFreeSql声明
fsql.Transaction(() {var affrows fsql.UpdateUser().Set(a a.Wealth - 100).Where(a a.Wealth 100)//判断别让用户余额扣成负数.ExecuteAffrows();if (affrows 1) {throw new Exception(用户余额不足);//抛出异常事务退出}affrows fsql.UpdateGoods().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