Recibo la siguiente excepción cuando uso las operaciones de Nhibernate y ADO.Net dentro de la transacción Scope.Eg. Estuvo bien con Nhibernate 2.1 pero ahora se actualizó a 3.0, lo que genera un error.Nhibernate with TransactionScope Error - Falló la fase previa de transacción de DTC - Actualizo a Nhibernate 3.0
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
GetmemberId(); --> NHibernate Call
Update(); ADO Call OracleDB
}
Dado que este actúa como transacción ambiente, Nhibernate trata de eliminar la transacción pronto antes de la transacción externa me completes.correct si estoy equivocado, ¿Hay alguna solución porque me ayude, pero cuando muevo la llamada Nhibernate fuera TransactionScope todo funciona bien. El ejemplo que he dado es una muestra, minas implica una más compleja, ya que tengo a mantener tanto las llamadas dentro de TransactionScope y el error Iam conseguir es la siguiente,
ERROR 13 NHibernate.Impl.AbstractSessionImpl - transacción DTC prepre phase failed System.ObjectDisposedException: no se puede acceder a un objeto eliminado. Nombre del objeto: 'Transaction'. en System.Transactions.Transaction.DependentClone (DependentCloneOption cloneOption) en System.Transactions.TransactionScope.SetCurrent (Transacción newCurrent) en System.Transactions.TransactionScope.PushScope()
en System.Transactions.TransactionScope.Initialize (Transacción transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified) en System.Transactions.TransactionScope..ctor (Transacción transactionToUse) en NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare (PreparingEnlistment preparingEnlistment) 2011-02- 08 13: 41: 46,033 ERROR 13 NHibernate.Impl.AbstractSessionImpl - Dpreced fase de transacción DTC failed System.ObjectDisposedException: no se puede acceder a un objeto eliminado. Nombre del objeto: 'Transaction'. en System.Transactions.Transaction.DependentClone (DependentCloneOption cloneOption) en System.Transactions.TransactionScope.SetCurrent (Transacción newCurrent) en System.Transactions.TransactionScope.PushScope()
en System.Transactions.TransactionScope.Initialize (Transacción transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified) en System.Transactions.TransactionScope..ctor (Transacción transactionToUse) en NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare (preparingEnlistment preparingEnlistment)
¡Gracias! ¡Funcionó para mí también! – Saxophonist