目前,我在各种类中使用事务范围的方法,并且有时会相互调用以共享操作,我像这样管理我的代码(代码只是一个类似于我真实实现的示例)
public class Father
{
public void CreateFather()
{
using (TransactionScope mainScope = new TransactionScope())
{
Son son = new Son();
//Some database operations
son.CreateSon();
mainScope.Complete();
}
}
}
public class Son
{
public void CreateSon()
{
using (TransactionScope scope = new TransactionScope())
{
//Some database operations,
scope.Complete();
}
}
}
有没有办法避免写作
using (TransactionScope mainScope = new TransactionScope()){
}
在每个方法中创建一个共享事务的全局类?或者有没有办法创建一个隐式事务,该事务在使用来自我的DAL的类时执行,处理完成和处理。像
这样的东西public class Father
{
public void CreateFather()
{
//some transaction code
GlobalTransaction.Run(); //Start transaction
Son son = new Son();
son.CreateSon(); //If CreateSon() fails, father transaction rolls back
}
}
public class Son
{
public void CreateSon()
{
//some transaction code
GlobalTransaction.Run(); //Uses current transaction, in this case from CreateFather()
}
}
该应用程序是ASP.Net的。
答案 0 :(得分:0)
你可以写:
using (TransactionScope mainScope = new TransactionScope(TransactionScopeOption.Required)){
}
此选项表示,如果存在事务,则新范围将支持它,并且不会创建新事务。更多信息here。
此外,它是TransactionScope
的默认值,因此如果在任何地方调用它,您就不会有问题。