NHibernate exception: Transaction not connected, o

2019-04-19 10:52发布

问题:

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.