嵌套事务的全局事务范围

时间:2015-09-11 16:26:59

标签: c# .net transactions

目前,我在各种类中使用事务范围的方法,并且有时会相互调用以共享操作,我像这样管理我的代码(代码只是一个类似于我真实实现的示例)

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的。

1 个答案:

答案 0 :(得分:0)

你可以写:

using (TransactionScope mainScope = new TransactionScope(TransactionScopeOption.Required)){
}

此选项表示,如果存在事务,则新范围将支持它,并且不会创建新事务。更多信息here。 此外,它是TransactionScope的默认值,因此如果在任何地方调用它,您就不会有问题。