2016-01-14 13 views
0
public void Operation01() 
{ 
    //Some Data manipulation here. 
    this.UnitOfWork.Commit(); 
} 

public void Operation02() 
{ 
    Operation01(); 

    //Some db work here 

    //Some ERROR Occurs here, but operation 1 is commited. 

    this.UnitOfWork.Commit(); 
} 

UnitOfWork является частным членом класса, введенного каркасом с использованием IOC.Вложенная транзакция с шаблоном UnitOfWork

Я не могу удалить Commit() из Operation01, потому что он иногда называется автономной операцией в приложении. Я хочу отменить все изменения, если на Operation02() возникла какая-либо ошибка.

ответ

1

Напрягите работу в отдельный метод ...

public void Operation01() 
{ 
    Operation01Worker(); 
    this.UnitOfWork.Commit(); 
} 

private void Operation01Worker() 
{ 
    //Some Data manipulation here. 
} 

public void Operation02() 
{ 
    Operation01Worker(); 

    //Some db work here 

    this.UnitOfWork.Commit(); 
} 
+0

любой другой способ, более элегантный ... –

+0

Magic? Это примерно так же просто, как вы можете получить. – dbugger

0

Как о чем-то с делегатами, как это:

public void Operation01(Action doThisToo = null) 
{ 
    //Some Data manipulation here. 

    if (!doThisToo == null) 
    { 
     doThisToo; 
    } 

    this.UnitOfWork.Commit(); 

}

public void Operation02() 
{ 
    Operation01(() => 
    { 
     //Some db work here 
    }); 
} 

Может быть не совсем то, что вы после, но вы понимаете.

 Смежные вопросы

  • Нет связанных вопросов^_^