首页 新闻 赞助 找找看

PetaPoco4.0的事务为什么不会回滚

0
悬赏园豆:100 [已解决问题] 解决于 2014-11-04 21:40
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 不会回滚,到只第一个操作插入成功,第二个操作插入失败

求解决方案

eZplusy的主页 eZplusy | 初学一级 | 园豆:16
提问于:2014-11-04 16:19
< >
分享
最佳答案
0

你要确认,你的两次操作和开启事物的连接是同一个数据库连接。

收获园豆:100
幻天芒 | 高人七级 |园豆:37175 | 2014-11-04 17:08

确定是同一个数据库连接的哦

不明白是什么问题了

eZplusy | 园豆:16 (初学一级) | 2014-11-04 20:22
其他回答(1)
0

搞定了,谢谢@幻天芒的提示

eZplusy | 园豆:16 (初学一级) | 2014-11-04 21:40

PetaPoco很小巧,基本就是在ado.net上包装了一层将实体转换为sql语句的方法。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-11-05 08:47

@幻天芒: 恩,以前没仔细看,等出问题的时候就找不到解决方法了,昨天研究了下,确实是你说的那样,再次感谢您的提示

支持(0) 反对(0) eZplusy | 园豆:16 (初学一级) | 2014-11-05 09:29

@eZplusy: 客气了,共同进步。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-11-05 09:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册