问题
In our develop environment all the ASP.NET application works just fine. However, when I deploy the site on the test machine, on some pages I get this exception:
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
I have no idea on how to solve this issue. The only difference are the DB versions: Develop: 10.0.5500 (2008 R2, SP1, Express) Test: 10.0.5500 (2008, SP3)
Does someone has an idea what is going on here?
回答1:
There's a problem with your session-per-request pattern implementation. ASP.NET is multi-threaded and the session is being closed when a thread terminates instead of when the request ends. There are many examples of how to manage session-per-request and NHibernate has a built in NHibernate.Context.WebSessionContext but I prefer to use a dependency injection framework such as Ninject.
回答2:
This was a comment, but I had the same issue as well.
This error can occur when a trigger causes a database level exception. This will cause the transaction to be rolled back hence the exception.
回答3:
Another problem could be the user security (a database level exception again). In my case the underlying DB problem was:
The server principal "AppUser" is not able to access the database "AppDB" under the current security context.
来源:https://stackoverflow.com/questions/15878493/nhibernate-exception-transaction-not-connected-or-was-disconnected