2010-04-26 2 views
1

우리는 리치 클라이언트 애플리케이션에서 NHibernate를 사용하고있다. 꽤 열려있는 응용 프로그램입니다 (사용자가 데이터 집합을 검색하거나 새 데이터 집합을 만들고 데이터를 변경하고 데이터 집합을 저장합니다.) 세션의 일부를 열어두기 때문에 때때로 객체의 일부 속성 (중첩 된 객체 우리가 세션을 열어두면 구조).NHibernate/다중 세션과 중첩 된 객체

이 의미하는 하나의 큰 문제는

  • 의 DB (MySQL은) 연결을 닫 우리는이를 찾을 수 없습니다 그것은 예외 (소켓 통신을 던졌습니다 오류) 데이터베이스에 액세스 할 때 (우리는 객체에 액세스하기 전에 db 연결을 테스트하려고 생각하고 있습니다. 그러나 이것은 실제로 최적이 아닙니다. 다른 옵션은 db 연결의 시간 초과를 설정하는 것입니다. b 이것은 단지 잘 보이지 않습니다.)

그래서 세션을 새 데이터베이스 연결에 다시 연결할 수 있습니까?

또 다른 문제

  • 그것은 하나 개의 세션에서 개체를 얻을 후 다른 세션에 다시 연결할 수 있습니까? (나는 종종 session.lock이 이것에 대해 작동해야한다고 들었지만 응용 프로그램에서는 그렇게 잘 작동하지 않는다. 그래서 세션에서 "신선한"객체를 얻었고 수동으로 데이터를 복사했다. 성가신)

어떤 아이디어라도?

+1

1. 연결이 예상대로 관리되지 않는 이유를 찾아야합니다. 어쩌면 코드의 다른 부분에서도 같은 문제가 발생할 수 있습니다. 세션 객체는 연결할 수 있으며 정상적인 상황에서는 여러 번 연결됩니다. 2. 게으른 로딩을 부적절하게 사용하는 이상한 응용 프로그램 디자인처럼 들립니다. 왜 이렇게했는지 설명해 주시겠습니까? 아니면 당신이 NHibernate를 처음 시도합니까? – Paco

+1

게으른로드 문제로 Paco에 동의합니다. 요청간에 ISession 인스턴스를 공유하고 있습니까? – jfneis

+0

잘 - 응용 프로그램 디자인에 결함이있는 것처럼 보입니다. 팁 주셔서 감사합니다. 모델의 데이터로 뷰를 채 웁니다. 그러나 나중에 사용자가 보고서를 만들고 (표시되지 않은 데이터가 필요함) - 세션을 열어 놓고 누락 된 데이터를로드하지 않도록했습니다. db에서 새로운 객체를 얻고 이것을 사용하는 것이 좋습니다. – bernhardrusch

답변

0

이제 응용 프로그램 디자인을 변경하기 시작했습니다. 지금까지는 가치가있는 것처럼 보였습니다.

우리의 주된 문제점은 우리가 매우 오랫동안 실행중인 트랜잭션을 사용한다는 것이 었습니다. 그래서 이것을 이것을 좀 더 건전한 접근 방식으로 바꿨습니다.

닫힌 연결에 더 이상 문제가 없습니다.

관련 문제