¿Puedo hacer transacciones anidadas en NHibernate y cómo las implemento? Estoy usando SQL Server 2008, por lo que el soporte está definitivamente en el DBMS.¿Cómo hago transacciones anidadas en NHibernate?
Me parece que si lo intento algo como esto:
using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
using (var nestedTX = UnitOfWork.Current.BeginTransaction())
{
... do stuff
nestedTX.Commit();
}
outerTX.Commit();
}
luego por el momento se trata de outerTX.Commit()
la transacción se ha vuelto inactiva, y resulta en una ObjectDisposedException en el AdoTransaction sesión.
¿Se supone que debemos crear sesiones anidadas de NHibernate en su lugar? ¿O hay alguna otra clase que deberíamos utilizar para envolver las transacciones (he oído hablar de TransactionScope, pero no estoy seguro de qué es eso)?
Ahora estoy usando Ayende's UnitOfWork implementation (gracias Sneal).
Perdón cualquier ingenuidad en esta pregunta, todavía soy nuevo en NHibernate.
Gracias!
EDITAR: He descubierto que se puede utilizar TransactionScope, tales como:
using (var transactionScope = new TransactionScope())
{
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
transactionScope.Commit();
}
Sin embargo, no estoy tan entusiasmado con esto, ya que nos encierra en que el uso de SQL Server y También encontré que si la base de datos es remota, entonces debe preocuparse por tener MSDTC habilitado ... un componente más que no funciona. Las transacciones anidadas son tan útiles y fáciles de hacer en SQL que supongo que NHibernate tendría alguna forma de emular el mismo ...
¿Ha sido capaz de encontrar la respuesta? ¿Cómo hacer transacciones anidadas finalmente? – learning
@ user281180, más o menos. No he encontrado la forma de hacerlo, pero puedes aproximar la experiencia. Han blogueado sobre esto aquí: http://blog.constructionhive.com/2010/07/22/nested-transactions-and-nhibernate/ – Gavin