2014-04-12 1 views
0

최근에 NHibernate를 ORM 도구로 사용하여 프로젝트 작업을 시작했습니다. nHibernate의 컨텍스트 세션에 대해 읽었고 그 배경을 이해했습니다. 한 영역에서 의심의 여지가있다NHibernate Db 웹 세션에서 만들어진 호출

직원 도메인이 있고 http 호출에서 직원 ID를 얻기 위해 저장소를 호출하는 경우 = 1, 3 번.

직원 employee = _employeeRepository.GetEmployee (1);

사례 1 : 1 db 통화가됩니다. 사례 2 : 3 db 호출입니다.

나를 안내하십시오.

RGDS 샌디

답변

1

그것은 당신의 설정에 따라 달라집니다.

쿼리하는 데 사용하는 각 Session 개체에 대해 첫 번째 수준의 캐시가 DB에 한 번 기록됩니다. 이 저장소와 공유되는 단일 Session이있는 경우 하나의 DB 호출 만 수행됩니다. 그러나 리포지토리를 호출 할 때마다 하나 이상의 Session이 생성되면 여러 번 호출됩니다. 이것이 기본값입니다.

두 번째 레벨 캐시가 활성화 된 경우 SessionFactory을 통해 생성 된 각 Session은 위의 속성을 공유합니다. 동일한 SessionFactory 인스턴스에서 나온 Session이 여러 개인 리포지토리가 여러 개있는 경우 두 리포지토리에서 동일한 직원을로드하면 단일 DB 호출이 발생합니다.

There is some good information in this post - 이것은 Hibernate와 관련이 있지만 기본 원칙은 여전히 ​​Hibernate에 적용된다.

웹 환경에서 두 번째 레벨 캐시 (우리는 SysCache2 사용)를 사용하도록 권장합니다. 따라서 Session은 항상 단일 요청 내에서 캐시 된 객체를 공유합니다 (가정 할 때 Session 평생 관리는 요청 당 .. 어떤 것이되어야합니다 ..).

+0

감사합니다. 귀하의 explantion 용 Simon 's – user2377549

관련 문제