获取和保存操作时处理连接和事务的正确方法

时间:2018-03-26 10:29:30

标签: c# ado.net

我有一个类似下面的方法,我在3个表中执行保存操作:

public void Do
{
      using (var myConnection = new SqlConnection(connectionString))
      {
           for (int i = 0; i < 4; i++)
           {
               MyProcess.Execute(myConnection);//Dispose connection
           }

           if (myConnection.State == ConnectionState.Closed)
           {
               myConnection.Open();   
               using (var transaction = myConnection.BeginTransaction())
               {
                   MyClass cls = new MyClass(myConnection,transaction);
                   // Here i have 3 insert operation 
                   try
                   {
                      myRepo.Save1(myConnection,transaction);
                      myRepo.Save2(myConnection,transaction);
                      myRepo.Save3(myConnection,transaction);
                      transaction.Commit();
                   }
                   catch
                   {
                      transaction.Rollback();
                   }
               }
           }
      }
}

现在在上面的方法中我创建了事务,这样如果插入在1个表中失败,那么它也会回滚其他表。

现在在MyClass中还有一些我需要传递事务的get数据操作,因为如果我不这样做,我会得到以下错误:

  

ExecuteScalar要求命令在具有事务时   分配给该命令的连接位于挂起的本地事务中。   该命令的Transaction属性尚未初始化。

以上错误来自GetOperations的{​​{1}},这就是为什么我在开始时创建了交易然后传递到MyClass的原因,其中我有一些MyClass来自数据库表

所以我的问题是我是否应该将我的交易限制为Save1,Save2和Save3,并在MyClass中包含所有Get Operations来打开和关闭他们自己的连接?

更新:

Get Operations

0 个答案:

没有答案