其他分享
首页 > 其他分享> > Bitter.Core系列八:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 事务

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

作者:互联网

Bitter.Core 编写事务相当简单,Bitter.Core 尽可能的将代码编写量降为最低,例外一方方面保证客户主观能控制代码。Bitter.Core 事务提交,支持Builkcopy事务,原生事务以及多次提交失败回滚,支持新增种子码事务.

下面附上详细的事务提交 教程--教程Demo 在  教程Demo 中都有提供:

/// <summary>
        /// 事务代码详细教程
        /// </summary>
        public static void DbScopeDemo()
        {
            dbscope dbs = new dbscope(); //示例化事务收集器
            //说明:事务收集器 dbscope.dotrancation 的参数是一个匿名委托方法
            dbs.dotrancation((list, models, bulkcopymodels) =>
            {
                TGRADEInfo gRadeinfo = new TGRADEInfo();
                gRadeinfo.FName = "年级_" + 1;
                gRadeinfo.FAddTime = DateTime.Now;
                var gradid = gRadeinfo.AddInScope(models); /**
                                                    * 如果 下面的代码需要用到新增数据的在数据库的自增种子ID,并且又需要通过事务执行。怎么办?
                                                    * 如 gRadeinfo  对象是一个年级新增实例,但是下面的 classInfo 班级新增实例 中的  FGradeId 关联了  gRadeinfo 中的 主键ID。
                                                    * 那么新增模型 可以通过 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;
            }
        }

标签:Core,事务,stduent,list,ORM,提交,gRadeinfo,Bitter
来源: https://www.cnblogs.com/davidchildblog/p/14292255.html