菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
448
0

Bitter.Core系列八:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 事务

原创
05/13 14:22
阅读数 32935

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; } }

发表评论

0/200
448 点赞
0 评论
收藏