Eu queria saber se é uma boa prática aninharduas transações? Por exemplo, envolvendo minha transação NHibernate com TransactionScope para o benefício dos testes (certificando-se de que o db anula todas as alterações feitas no teste).
A outra opção é manter as entidades que insiro no banco de dados na memória e excluí-las no final do teste.
Qual é o melhor?
Respostas:
1 para resposta № 1Primeiro de tudo, nhibernate não suporta transações aninhadas!
TransactionScope no outro lado não irá criar uma nova transação se já houver uma aberta. Se você usar apenas o escopo da transação, ele criará uma nova transação para a conexão.
Se você abrir uma transação dentro do escopo, isso ainda funcionará com o nhibernate.
Voltando à sua pergunta, depende muitoa quantidade de objetos que você cria dentro do TransactionScope. Se se tornar muito, você simplesmente enviará um spam para o log de transações do seu banco de dados. Além disso, o conceito é perfeitamente bem, eu diria.
E uma coisa importante para mencionar, se você usarTransactionScope, e você criar várias sessões / transações com nhibernate, o escopo pode alternar para transações distribuídas que exigem MSDTC para executar no servidor de destino, caso contrário, ele simplesmente falhará.