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 之 事务的更多相关文章

  1. Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 开源了

    开源的来了,懒人程序员的福音,.NET 生态闭环太缺开源精神了, 拥抱开源! 前言: 本人不是不喜欢现有ORM的轮子,而是发现现有的ORM 的都不太符合开发人员的一些习惯.现有的ORM 要么功能太冗余 ...

  2. Bitter.Core系列五:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 分页聚联查询

    Bitter.Core 在聚联/分页聚联查询的时候,采用原生的MSSQL, MYSQL 语句查询,做过复杂高级项目的人知道,原生的聚合查询代码执行效率更高,更快,更容易书写,开发量最少. 借助原生的M ...

  3. Bitter.Core系列二:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之数据库连接

    Bitter.Core NETCore 相当的简单易用,下面附上使用示例: 数据中连接:请在你的NETCORE 项目中 创建:Bitter.json 配置文件,然后追加如下配置内容: MSSQL 连接 ...

  4. Bitter.Core系列 十二 :Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 支持的 where 条件表达式

    Bitter.Core 内置了支持大部分的 linq 的条件表达式.基本上符合我们 where 条件所需.Bitter.Core 的支持 表达式内置  扩展 有: EndsWith    在Sql 解 ...

  5. Bitter.Core系列十一:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 字段变更收集器

    有时候我们业务层需要记录 数据库表更改之前的值和更改之后的值的记录集合--此过程在 Bitter.Core 中有强有力的支持.Bitter.Core 字段收集器提供了方便简单易用的 收集对象在修改之前 ...

  6. Bitter.Core系列十:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 Log 日志

    Bitter 框架的 Log 全部采用 NLog 日志组件.Bitter.Core 的 执行语句的日志记录 Nlog 日志级别为:info.  如果想要查看Bitter.Core 的执行SQL,先要去 ...

  7. Bitter.Core系列九:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 WITH 子句支持

    有时我们在聚合查询中,经常会有复杂的聚联查询.有时表的聚联查询SQL 子句比较复杂,DBA 会经常告诉们,能否通过WITH 子句优化.WITH 子句,是对SQL 聚联查询的优化.Bitter.Core ...

  8. Bitter.Core系列三:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例模型创建

    在具体数据库操作之前,我们先准备好四张表以及相对应数据库操作模型: 学生表,年级表,班级表,学分表.示例数据库表,如下代码(MSSQL 为例) --学生表 CREATE TABLE t_student ...

  9. Bitter.Core系列七:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 示例 更新删除插入

    Bitter Orm 在操作数据库增删改的时候,支持模型驱动和直接执行裸SQL 操作,示例代码如下: 一:模型驱动(增删改) /// <summary> /// 插入,删除,更新示例(模型 ...

随机推荐

  1. frp杀毒软件报毒?

    原文地址:https://wuter.cn/1909.html/ 部分用户下载frp之后,windows defender可能会报毒,并且自动删除内网穿透主程序,导致无法穿透. 首先看一下报毒的原理是 ...

  2. Redis 设计与实现 6:五大数据类型之字符串

    前文 Redis 设计与实现 2:Redis 对象 说到,五大数据类型都会封装成 RedisObject. typedef struct redisObject { unsigned type:4; ...

  3. JAVA十大经典排序算法最强总结(含JAVA代码实现)

    0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...

  4. [leetcode]54. Spiral Matrix二维数组螺旋取数

    import java.util.ArrayList; import java.util.List; /** * Given a matrix of m x n elements (m rows, n ...

  5. 页面中嵌套iframe,微信浏览器长按二维码识别不了

    问题:在微信浏览器内,页面中嵌套iframe,iframe中用户触发事件后有个弹框会显示二维码,用户长按二维码可以识别并跳转.尝试了一下,安卓是正常的,但是ios是识别不了的. 解决过程: 1.这里客 ...

  6. Java生成窗口

    //字符串数组转变成int数组ints[i] = Integer.parseInt(str_string[i]);//设置窗口关闭Frame.addWindowListener(new WindowA ...

  7. JavaScript入门-学习笔记(一)

    JavaScript入门(一) 学习js之前,我们先来了解一下,什么是JavaScript? JavaScript是一种解释型语言.在运行的时候,一边读一边编译一边执行.简单来说就是,在执行js代码时 ...

  8. Elastisearch在kibana下批量处理(mget和bulk)

    一.批量查询 有点:能够大大减少网络的请求次数,减少网络开销 1.自定义设置index.type以及document id,进行查询 GET /_mget { "docs":[ { ...

  9. java的多线程:线程基础

    1.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是 ...

  10. 我的开源项目在五个月内超过了 600 star

    其实我在 2016 年年底就开始写了这个项目:Forest,一个能够将 HTTP 的所有请求信息(包括 URL .Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能 ...