방금 NHibernate를 사용하기 시작했고 제대로 해결할 방법이 확실하지 않은 몇 가지 문제가 있습니다.NHibernate 세션 - Windows 응용 프로그램에서 세션을 처리하는 일반적인 방법은 무엇입니까?
나는 CUD와 두 가지 검색 방법을 포함하는 일반 저장소를 만들기 시작했습니다. 이러한 각 메소드는 DB 작업 중 별도의 세션 (필요한 경우 트랜잭션)을 엽니 다. 이렇게 할 때 문제는 (내가 말할 수있는 한) 관련된 콜렉션/객체의 게으른 로딩을 이용할 수 없다는 것입니다.
유창한 매핑에서 거의 모든 엔티티 관계가 .Not.LazyLoad()
이므로 주어진 유형의 모든 엔티티 목록을 요청하면 전체 데이터베이스가로드됩니다. 내가 틀렸다면 난 아직 완전한 안돼서 원인이 올 때
? 프로그램이 실행되는 동안 하나의 전역 정적 세션을 유지합니까? 그렇지 않으면 어떻게해야합니까?
이var person = m_PersonRepository.GetById(1); // works fine
var contactInfo = person.ContactInfo; // Throws exception with message:
// failed to lazily initialize a collection, no session or session was closed
답변 해 주셔서 감사합니다. 문서에서 챕터를 읽었지만 두 번째 문장에서 의미하는 바를 아직도 이해하지 못합니다. 게으른로드 속성에 액세스해야하는 경우 세션을 유지해야한다는 의미입니까? 질문에 저장소 코드를 추가하겠습니다. – l3dx
물론 - 질문에 약간의 문맥을 추가하면 답변에 좀 더 구체적으로 설명 할 것입니다. –
니스, 정말 고마워! +1 나는 내 저장소를 리팩터링 할 것입니다. :) 내 이해는 실제 응용 프로그램에서 세션/db 항목을 "계층화"해야한다는 것입니다. 추가적으로 저장소에서 제거한다면 어디에 놓을까요? – l3dx