クラスCでA()、B()、mainFunction()という名前のメソッドがあるとします。mainFunction()ではA()メソッドとB()メソッドの両方を実行する必要がありますが、 ()およびcommitTransaction()を呼び出します。 B()にエラーが発生した場合、A()のトランザクションは引き続きコミットされますか?はいの場合、どうすればこの問題を解決できますか?nHibernateのネストされたトランザクションを管理する
public void A(ISession objSession)
{
//functions
}
public void B(ISession objSession)
{
//functions
}
public void mainFunction()
{
ISession objSession = base.GetCurrentSession;
using (ITransaction transaction = objSession.BeginTransaction)
{
try
{
A(objSession);
B(objSession);
//If successful for everything:
objSession.Flush();
objSession.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
基本的に私はmainFunctionのためのグローバル変数としてISessionを作っ:事前
public class C
{
public void A()
{
//beginTransaction
//functions
//commitTransaction
}
public void B()
{
//beginTransaction
//functions
//commitTransaction
}
public void mainFunction()
{
A();
B();
}
}
[NHibernateでネストされたトランザクションを実行するにはどうすればいいですか?](https://stackoverflow.com/questions/1192111/how-do-i-do-nested-transactions-in-nhibernate) – Najera