1
우리는 리치 클라이언트 애플리케이션에서 NHibernate를 사용하고있다. 꽤 열려있는 응용 프로그램입니다 (사용자가 데이터 집합을 검색하거나 새 데이터 집합을 만들고 데이터를 변경하고 데이터 집합을 저장합니다.) 세션의 일부를 열어두기 때문에 때때로 객체의 일부 속성 (중첩 된 객체 우리가 세션을 열어두면 구조).NHibernate/다중 세션과 중첩 된 객체
가이 의미하는 하나의 큰 문제는
- 의 DB (MySQL은) 연결을 닫 우리는이를 찾을 수 없습니다 그것은 예외 (소켓 통신을 던졌습니다 오류) 데이터베이스에 액세스 할 때 (우리는 객체에 액세스하기 전에 db 연결을 테스트하려고 생각하고 있습니다. 그러나 이것은 실제로 최적이 아닙니다. 다른 옵션은 db 연결의 시간 초과를 설정하는 것입니다. b 이것은 단지 잘 보이지 않습니다.)
그래서 세션을 새 데이터베이스 연결에 다시 연결할 수 있습니까?
또 다른 문제
- 그것은 하나 개의 세션에서 개체를 얻을 후 다른 세션에 다시 연결할 수 있습니까? (나는 종종 session.lock이 이것에 대해 작동해야한다고 들었지만 응용 프로그램에서는 그렇게 잘 작동하지 않는다. 그래서 세션에서 "신선한"객체를 얻었고 수동으로 데이터를 복사했다. 성가신)
어떤 아이디어라도?
1. 연결이 예상대로 관리되지 않는 이유를 찾아야합니다. 어쩌면 코드의 다른 부분에서도 같은 문제가 발생할 수 있습니다. 세션 객체는 연결할 수 있으며 정상적인 상황에서는 여러 번 연결됩니다. 2. 게으른 로딩을 부적절하게 사용하는 이상한 응용 프로그램 디자인처럼 들립니다. 왜 이렇게했는지 설명해 주시겠습니까? 아니면 당신이 NHibernate를 처음 시도합니까? – Paco
게으른로드 문제로 Paco에 동의합니다. 요청간에 ISession 인스턴스를 공유하고 있습니까? – jfneis
잘 - 응용 프로그램 디자인에 결함이있는 것처럼 보입니다. 팁 주셔서 감사합니다. 모델의 데이터로 뷰를 채 웁니다. 그러나 나중에 사용자가 보고서를 만들고 (표시되지 않은 데이터가 필요함) - 세션을 열어 놓고 누락 된 데이터를로드하지 않도록했습니다. db에서 새로운 객체를 얻고 이것을 사용하는 것이 좋습니다. – bernhardrusch