我有一个类似下面的方法,我在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