Bitter.Core系列八:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 事务
Bitter.Core 编写事务相当简单,Bitter.Core 尽可能的将代码编写量降为最低,例外一方方面保证客户主观能控制代码。Bitter.Core 事务提交,支持Builkcopy事务,原生事务以及多次提交失败回滚,支持新增种子码事务.
下面附上详细的事务提交 教程--教程Demo 在 案例 Demo 中都有提供 (Github:https://github.com/DavidChild/Bitter.Core.Sample.git):
/// <summary>
/// 事务代码详细教程
/// </summary>
public static void DbScopeDemo()
{
dbscope dbs = new dbscope(); //实例化事务收集器
dbs.dotrancation((list, models, bulkcopymodels) => //说明: dbscope.dotrancation 的参数是一个匿名委托方法 {
TGRADEInfo gRadeinfo = new TGRADEInfo();
gRadeinfo.FName = "年级_" + 1;
gRadeinfo.FAddTime = DateTime.Now;
var gradid = gRadeinfo.AddInScope(models); /**
* 如果 下面的代码需要用到新增数据库的自增种子ID,并且又需要通过事务执行。怎么办?
* 如 上面gRadeinfo是一个年级新增实例,但是下面的 classInfo 是一个班级 新增实例 中的,班级实例中 FGradeId 关联了 gRadeinfo 中的 主键ID。
* 那么新增模型 gRadeinfo 可以通过 db.dotrancation 的匿名委托方法中通过 AddInScope 方法操作,
* 在事务中先将先执行gRadeinfo执行插入数据库中,获取到ID,然后将此模型缓存起来,
* 如果事务执行失败,那么此模型行将自动执行删除操作!
*/
if (gradid <= 0)
{
throw (new Exception("错误:终止事务!"));
} TClassInfo classInfo = new TClassInfo();
classInfo.FName = "班级201";
Random rd = new Random();
classInfo.FGradeId = gradid; //使用上面新增的 gRadeinfo 数据库新产生的 自增长主键Id
classInfo.FAddTime = DateTime.Now;
classInfo.Insert().AddInScope(list); // 塞入 到 list 中-- sqlquery 收集器中 中,等待提交执行 //学生
var count = 20;
for (int ci = 0; ci <= count; ci++)
{
TStudentInfo info = new TStudentInfo();
info.FName = "HJB" + ci; info.FClassId = 2;
info.FAddTime = DateTime.Now;
Random rdage = new Random();
info.FAage = rdage.Next(16, 20);
info.BulkCopy().AddInScope(bulkcopymodels);//塞入 到 bulkcopymodels 中-- bulkcopy 收集器 等待提交执行 } var sqlcommand = "update t_student set FAge=@age";
db.Excut(sqlcommand,new { age=17 }).AddInScope(list); //将裸SQL的操作执行放入 list 中-- sqlquery 收集器中等待执行 var stduent_1 = db.FindQuery<TStudentInfo>().QueryById(50);
stduent_1.FAage = 16;
stduent_1.Update().AddInScope(list); // 塞入 到 list-- sqlquery 收集器中 中,等待提交执行 var stduent_2 = db.FindQuery<TStudentInfo>().QueryById(51);
stduent_2.FAage = 18;
stduent_2.Delete().AddInScope(list); // 塞入 到 list-- sqlquery 收集器中 中,等待提交执行
});
bool issuccess= dbs.Submit(); //由用户自主指定何时提交事务
if (issuccess)
{
//事务提交执行成功
}
else
{
//事务提交失败
string failmessage = dbs.ScopeException.Message;
}
}
Bitter.Core系列八:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 事务的更多相关文章
- Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 开源了
开源的来了,懒人程序员的福音,.NET 生态闭环太缺开源精神了, 拥抱开源! 前言: 本人不是不喜欢现有ORM的轮子,而是发现现有的ORM 的都不太符合开发人员的一些习惯.现有的ORM 要么功能太冗余 ...
- Bitter.Core系列五:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 分页聚联查询
Bitter.Core 在聚联/分页聚联查询的时候,采用原生的MSSQL, MYSQL 语句查询,做过复杂高级项目的人知道,原生的聚合查询代码执行效率更高,更快,更容易书写,开发量最少. 借助原生的M ...
- Bitter.Core系列二:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之数据库连接
Bitter.Core NETCore 相当的简单易用,下面附上使用示例: 数据中连接:请在你的NETCORE 项目中 创建:Bitter.json 配置文件,然后追加如下配置内容: MSSQL 连接 ...
- Bitter.Core系列 十二 :Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 支持的 where 条件表达式
Bitter.Core 内置了支持大部分的 linq 的条件表达式.基本上符合我们 where 条件所需.Bitter.Core 的支持 表达式内置 扩展 有: EndsWith 在Sql 解 ...
- Bitter.Core系列十一:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 字段变更收集器
有时候我们业务层需要记录 数据库表更改之前的值和更改之后的值的记录集合--此过程在 Bitter.Core 中有强有力的支持.Bitter.Core 字段收集器提供了方便简单易用的 收集对象在修改之前 ...
- Bitter.Core系列十:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 Log 日志
Bitter 框架的 Log 全部采用 NLog 日志组件.Bitter.Core 的 执行语句的日志记录 Nlog 日志级别为:info. 如果想要查看Bitter.Core 的执行SQL,先要去 ...
- Bitter.Core系列九:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 WITH 子句支持
有时我们在聚合查询中,经常会有复杂的聚联查询.有时表的聚联查询SQL 子句比较复杂,DBA 会经常告诉们,能否通过WITH 子句优化.WITH 子句,是对SQL 聚联查询的优化.Bitter.Core ...
- Bitter.Core系列三:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例模型创建
在具体数据库操作之前,我们先准备好四张表以及相对应数据库操作模型: 学生表,年级表,班级表,学分表.示例数据库表,如下代码(MSSQL 为例) --学生表 CREATE TABLE t_student ...
- Bitter.Core系列七:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 示例 更新删除插入
Bitter Orm 在操作数据库增删改的时候,支持模型驱动和直接执行裸SQL 操作,示例代码如下: 一:模型驱动(增删改) /// <summary> /// 插入,删除,更新示例(模型 ...
随机推荐
- 回顾 2020 年 GitHub 的大事件,你知道多少?
作者:HelloGitHub-小鱼干 这里是 HelloGitHub 出品的年度盘点系列,本期我们将盘点 GitHub 在 2020 发生的大事件,回顾一下今年 GitHub 给我们带来了那些惊喜.故 ...
- 想成为Git大神?从学会reset开始吧
大家好,今天我们来着重介绍一个非常关键的功能就是reset.在上一篇文章介绍修改历史记录的时候曾经提到过,当我们需要拆分一个历史提交记录的时候需要使用reset.估计很多小伙伴不明白,reset究竟做 ...
- 【Java并发编程】阿里最喜欢问的几道线程池的面试题?
引言 上一篇文章我们有介绍过线程池的一个基本执行流程<[Java并发编程]面试必备之线程池>以及它的7个核心参数,以及每个参数的作用.以及如何去使用线程池 还留了几个小问题..建议看这篇文 ...
- 还在使用Future轮询获取结果吗?CompletionService快来了解下吧。
背景 二胖上次写完参数校验(<二胖写参数校验的坎坷之路>)之后,领导一直不给他安排其他开发任务,就一直让他看看代码熟悉业务.二胖每天上班除了偶尔跟坐在隔壁的前端小姐姐聊聊天,就是看看这些 ...
- 使用swagger上传文件
经常使用swagger,可以通过设置[ProducesResponseType]标记接口的返回信息:swagger也能通过接口的参数列表,自动获得发送的数据结构信息. 不过有一个例外,就是上传文件的时 ...
- CSDN中的MARKDOWN编辑器如何快速复制粘贴图片?
前言 我们在使用csdn的markdown编辑器复制其它网站图片,按住ctrl+C复制选择图片,然后按ctrl+V粘贴图片到md编辑器无任何反应!markdown编辑器每次都没法复制粘贴截图! 下面小 ...
- java中byte,byte[]和int之间的转换
1>byte类型转换为,直接隐式转换,适用于要求保持数值不变,例如要求进行数值计算 如 byte b=0x01; int i=b; 2>另一种是要求保持最低字节中各个位不变,3个高字节全部 ...
- mysql performance storage engine
mysql performance storage engine 概要 mysql的运行时状态记录的存储引擎,实现了PSI(Performance Storage Interface) 通过WITH_ ...
- JAVA编程环境与基本数据类型
<JAVA编程环境与基本数据类型> 随笔目录 # <JAVA编程环境与基本数据类型> 随笔目录 - Java小实例 java的编程环境 java数据类型 Java小实例 jav ...
- YGGL.sql
(将表复制粘贴至记事本,再用source命令导入到数据库中) CREATE TABLE `departments` ( `部门编号` char(3) NOT NULL COMMENT '部门编号', ...