gpt4 book ai didi

c# - 交易范围和手动定义的交易之间的区别?

转载 作者:行者123 更新时间:2023-11-30 18:08:19 26 4
gpt4 key购买 nike

您好,刚刚阅读了有关使用事务范围的信息,以前我习惯在单个数据库类中进行事务,例如

try
{
con.Open();
tran = con.BeginTransaction();
OleDbCommand myCommand1 = new OleDbCommand(query1, con);
OleDbCommand myCommand2 = new OleDbCommand(query2, con);
myCommand .Transaction = tran;
// Save Master
myCommand1.ExecuteNonQuery();

// Save Childred
myCommand2.ExecuteNonQuery();

// Commit transaction
tran.Commit();

}
catch (OleDbException ex)
{
tran.Rollback();
lblError.Text = "An error occured " + ex.ToString();
}

finally
{
if (con != null)
{
con.Close();
}

}

但现在我知道我可以通过使用事务范围对象和使用单独的数据库类来简单地在业务逻辑层内执行事务

   public static int Save(Employee myEmployee)
{
using (TransactionScope myTransactionScope = new TransactionScope())
{
int RecordId = EmpDB.Save(myEmployee);

foreach (Address myAddress in myEmployee.Addresses)
{
myAddress.EmployeeId = EmployeeId;
AddressDB.Save(myAddress);
}

foreach (PhoneNumber myPhoneNumber in myEmployee.PhoneNumbers)
{
myPhoneNumber.EmployeeId = EmployeeId;
PhoneNumberDB.Save(myPhoneNumber);
}

myTransactionScope.Complete();

return EmployeeId;
}
}

哪一个是推荐的编码实践,为什么?使用事务范围安全吗?这是最新的做事方式吗?我对这两种方法感到困惑。

提前致谢。

最佳答案

Transaction 范围的好处之一是您不需要 try/catch block 。您只需在作用域上调用 Complete 即可提交事务,如果确实发生异常,它会自动回滚。

您还可以使用其他能够参与事务的组件,而不仅仅是数据库连接。这是因为组件(包括连接)在当前线程上寻找事务。调用

创建的就是这个事务
using (TransactionScope myTransactionScope = new TransactionScope())

关于c# - 交易范围和手动定义的交易之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com