2013-04-08 14 views
11

Nel nostro ambiente di sviluppo tutte le applicazioni ASP.NET funzionano correttamente. Tuttavia, quando ho distribuire il sito sulla macchina di prova, in alcune pagine ottengo questa eccezione:Eccezione NHibernate: transazione non connessa o scollegata

NHibernate.TransactionException: Transaction not connected, or was disconnected 
    at NHibernate.Transaction.AdoTransaction.CheckNotZombied() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 406 
    at NHibernate.Transaction.AdoTransaction.Rollback() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 240 

Non ho idea su come risolvere questo problema. L'unica differenza sono le versioni DB: formarsi: 10.0.5500 (2008 R2, SP1, espresso) Test: 10.0.5500 (2008, SP3)

fa qualcuno ha un'idea di quello che sta succedendo qui?

+0

È difficile dirlo senza alcun codice. –

risposta

4

C'è un problema con l'implementazione del modello sessione per richiesta. ASP.NET è multi-thread e la sessione viene chiusa quando un thread termina anziché quando termina la richiesta. Ci sono molti examples su come gestire session-per-request e NHibernate ha un built-in NHibernate.Context.WebSessionContext ma preferisco usare un framework di dipendenza dipendenza come Ninject.

+6

Grazie per la tua risposta, ma io (finalmente) l'ho capito. C'era un trigger che provoca un'eccezione, che a sua volta ha causato un rollback. – Martijn

25

Questo era un commento, ma ho avuto lo stesso problema.

Questo errore può verificarsi quando un trigger causa un'eccezione a livello di database. Ciò causerà il rollback della transazione quindi l'eccezione.

+3

Vero, nel mio caso, stavo inserendo una stringa che era più lunga di quanto accettato dal campo del database. Il messaggio di errore non è molto utile. – Candide

+0

E 'stato utile per me! – Rahnzo

+1

Sì. Ho avuto qualche tipo di corrispondenza mancata nei dati inseriti, e ho ricevuto questo errore incomprensibile da NHibernate. Sarebbe stato bello se avessero potuto passare l'errore di Sql invece di questa confusa assurdità. –

0

Un altro problema potrebbe essere la sicurezza dell'utente (un'eccezione di livello di database di nuovo). Nel mio caso il problema di DB sottostante era:

The server principal "AppUser" is not able to access the database "AppDB" under the current security context. 
Problemi correlati