2013-04-08 3 views
11

개발 환경에서 모든 ASP.NET 응용 프로그램이 올바르게 작동합니다. 그러나 테스트 컴퓨터에 사이트를 배포 할 때 일부 예외가 발생합니다.NHibernate 예외 : 트랜잭션이 연결되지 않았거나 연결이 끊어졌습니다.

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 

이 문제를 해결하는 방법에 대해서는 잘 모릅니다. 유일한 차이점은 DB 버전입니다. 개발 : 10.0.5500 (2008 R2, SP1, Express) 테스트 : 10.0.5500 (2008, SP3)

여기에 무슨 일이 벌어지고 있는지 아이디어를 가지고 있습니까?

+0

코드 없이는 말하기 어렵습니다. –

답변

4

요청 당 세션 패턴 구현에 문제가 있습니다. ASP.NET은 다중 스레드이며 요청이 끝나는 대신 스레드가 종료 될 때 세션이 닫힙니다. 많은 examples 요청 당 세션을 관리하는 방법과 NHibernate에 NHibernate.Context.WebSessionContext이 내장되어 있지만, Ninject과 같은 의존성 주입 프레임 워크를 사용하는 것을 선호합니다.

+6

답장을 보내 주셔서 감사합니다.하지만 마지막으로 알아 냈습니다. 예외를 유발하는 트리거가 발생 했으므로 롤백이 발생했습니다. – Martijn

25

이것은 댓글 이었지만 같은 문제가있었습니다.

이 오류는 트리거로 인해 데이터베이스 수준 예외가 발생할 때 발생할 수 있습니다. 이로 인해 트랜잭션이 롤백되므로 예외가 발생합니다.

+3

사실, 제 경우에는 데이터베이스 필드가 허용하는 것보다 긴 문자열을 삽입하고있었습니다. 오류 메시지는별로 유용하지 않습니다. – Candide

+0

나에게 도움이되었다! – Rahnzo

+1

예. 삽입 된 데이터에서 일부 데이터 형식이 일치하지 않아 NHibernate에서이 이해할 수없는 오류가 발생했습니다. 그들이 혼란스러운 헛소리 대신 Sql의 오류를 방금 통과 할 수 있다면 좋았을 것입니다. –

0

또 다른 문제점은 사용자 보안 (데이터베이스 수준 예외)입니다. 필자의 경우 기본 DB 문제는 다음과 같습니다.

The server principal "AppUser" is not able to access the database "AppDB" under the current security context. 
관련 문제