/// <summary> /// 初始化数据 /// </summary> public static void InitData() { int count = 11; int ix = 0; //年级 for (ix = 0; ix <= count; ix++) { TGRADEInfo info = new TGRADEInfo(); info.FName = "年级_" + ix; info.FAddTime = DateTime.Now; info.Insert().Submit(); } //班级 for (ix = 0; ix <= count; ix++) { TClassInfo info = new TClassInfo(); info.FName = "班级_" + ix; Random rd = new Random(); info.FGradeId = rd.Next(1, 10); info.FAddTime = DateTime.Now; info.Insert().Submit(); } //学生 count = 1000; for (ix = 0; ix <= count; ix++) { TStudentInfo info = new TStudentInfo(); info.FName = "HJB" + ix; Random rd = new Random(); info.FClassId = rd.Next(2, 9); info.FAddTime = DateTime.Now; Random rdage = new Random(); info.FAage = rdage.Next(16, 20); info.Insert().Submit(); } //学分 count = 2000; for (ix = 0; ix <= count; ix++) { TStudentScoreInfo info = new TStudentScoreInfo(); Random rd = new Random(); info.FStudentId = rd.Next(2, 99); info.FAddTime = DateTime.Now; Random rdage = new Random(); info.FScore = rdage.Next(1, 100); info.Insert().Submit(); } }
/// <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的操作执行放入 listlist-- 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; } }