using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘信息 if (ID.ToInt32() > 0) { FY_ActivityProjectServer dtlServer = new FY_ActivityProjectServer(); for (int i = 0; i <= this.Projects.Items.Count; i++) { if (this.Projects.Items[i].Selected) { FY_ActivityProject dtl = new FY_ActivityProject(); dtl.ActivityID = ID.ToInt32(); dtl.ProjectID = this.Projects.Items[i].Value.ToInt32(); dtl.IsDel = false; dtlList.Add(dtl); } } dtlServer.AddModel(dtlList); } #endregion srop.Complete(); }
以上是第一种写法
下面是第二种写法:
DbHelper.CurrentDb.BeginTransaction();//事务开始 this.ModelDataCollect(); FY_ActivityServer bp = new FY_ActivityServer(); try { ID = bp.AddModel(model).ToStr(); #region 参与楼盘信息 if (ID.ToInt32() > 0) { FY_ActivityProjectServer dtlServer = new FY_ActivityProjectServer(); for (int i = 0; i <= this.Projects.Items.Count; i++) { if (this.Projects.Items[i].Selected) { FY_ActivityProject dtl = new FY_ActivityProject(); dtl.ActivityID = ID.ToInt32(); dtl.ProjectID = this.Projects.Items[i].Value.ToInt32(); dtl.IsDel = false; dtlList.Add(dtl); } } dtlServer.AddModel(dtlList); } #endregion DbHelper.CurrentDb.CompleteTransaction(); } catch (Exception) { DbHelper.CurrentDb.AbortTransaction(); }
以上操作有两个insert操作
第一个insert能插入成功,第二个insert方法故意让它报错,
问题来了,
PetaPoco 不会回滚,到只第一个操作插入成功,第二个操作插入失败
求解决方案
你要确认,你的两次操作和开启事物的连接是同一个数据库连接。
确定是同一个数据库连接的哦
不明白是什么问题了
搞定了,谢谢@幻天芒的提示
PetaPoco很小巧,基本就是在ado.net上包装了一层将实体转换为sql语句的方法。
@幻天芒: 恩,以前没仔细看,等出问题的时候就找不到解决方法了,昨天研究了下,确实是你说的那样,再次感谢您的提示
@eZplusy: 客气了,共同进步。