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. 如何查看打印机的IP地址和MAC地址

    1.  打开控制面板,选择设备和打印机: 2.  选中打印机,右键单机,选择打印机 "属性": 3. 选择web服务,可以直接查看打印机的IP地址或MAC地址,如下图所示: 4. ...

  2. [论文分享]Channel Pruning via Automatic Structure Search

    authors: Mingbao Lin, Rongrong Ji, etc. comments: IJCAL2020 cite: [2001.08565v3] Channel Pruning via ...

  3. ES6语法:class类,从了解到使用

    前期提要:  JavaScript 语言中,在使用类之前,生成实例对象的传统方法是通过使用构造函数. 一.构造函数: 定义:通过  new 函数名  来实例化对象的函数叫构造函数.   主要功能:为初 ...

  4. JavaScript window.onload 事件和 jQuery ready 函数有何不同?

    JavaScript window.onload 事件和 jQuery ready 函数之间的主要区别是,前者除了要等待 DOM 被创建还要等到包括大型图片.音频.视频在内的所有外部资源都完全加载.如 ...

  5. Vue - MVVM模式及优点

    MVVM模式 视图层和数据层的双向绑定,让我们无需再去关心DOM操作的事情,更多的精力放在数据和业务逻辑上去 MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想. Mod ...

  6. 用Margin还是用Padding的区别

    用margin还是用padding这个问题是每个学习CSS进阶时的必经之路. CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时 ...

  7. mysql 双主复制 centos7

    mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...

  8. 微信小程序--仿微信小程序朋友圈Pro(内容发布、点赞、评论、回复评论)

    微信小程序--仿微信小程序朋友圈Pro(内容发布.点赞.评论.回复评论) 项目开源地址M朋友圈Pro 求个Star 项目背景 ​ 基于原来的开源项目 微信小程序仿朋友圈功能开发(发布.点赞.评论等功能 ...

  9. 使用lua+redis解决发多张券的并发问题

    前言 公司有一个发券的接口有并发安全问题,下面列出这个问题和解决这个问题的方式. 业务描述 这个接口的作用是给会员发多张券码.涉及到4张主体,分别是:用户,券,券码,用户领取记录. 下面是改造前的伪代 ...

  10. 软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结

    本文主要阐述软件性能测试中的一些调优思想和技术,节选自作者新书<软件性能测试分析与调优实践之路>部分章节归纳. 在国内互联网公司中,Web中间件用的最多的就是Apache和Nginx这两款 ...