PetaPoco4.0.3 事务不会回滚

tiancaizhou 2014-11-04 04:35:07



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 不会回滚,导致第一个操作插入成功,第二个操作插入失败

求解决方案
...全文
140 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangweimutou 2014-11-05
  • 打赏
  • 举报
回复
你拼接一下sql语句,本地事务的方法参照:

     /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">多条SQL语句</param>		
        public static int ExecuteSqlTran(List<String> SQLStringList)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                SqlTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    int count = 0;
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strsql = SQLStringList[n];
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            count += cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                    return count;
                }
                catch
                {
                    tx.Rollback();
                    return 0;
                }
            }
        }
tiancaizhou 2014-11-04
  • 打赏
  • 举报
回复
在线等。。。。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧