2009-07-24 2 views
2

NHibernate 게으른로드 콜렉션에 기준을 추가 할 수 있는지 누가 알 수 있습니까?lazyload에 대한 NHibernate 기준

예를 들어 직원이있는 부서가 있다고 가정 해 보겠습니다. 직원 ID가 부서인 경우 직원이 게으르지 만 직원 수가 1000 명이되는 직원을 원합니다. 지난 30 일 동안 고용되었습니다.

GetDeptById (1)
     을 | 나는 아마도 매핑 파일에서 필터를 사용하여이 작업을 수행 할 수 있었던 것처럼
      --Lazy 부하 직원 (HIREDATE> = 2009년 7월 1일는)

보인다 ...하지만 난에 기준의 어떤 종류를 추가 할 수 있습니다 코드의 게으른로드?

답변

2

필터를 구현하는 가장 좋은 방법은 필터를 사용하는 것입니다. 매핑 (엔티티와 가방 모두)에 필터를 정의한 다음 "부서"를 선택하기 전에 원하는 날짜로 매개 변수가있는 필터를 활성화하십시오.

session.EnableFilter("HireDateFilter").SetParameter("dateParameter", DateTime.Now.AddDays(-30)); 

매핑을있는 그대로두고 게으른로드 된 컬렉션에 사용자 정의 필터를 적용 할 수도 있습니다.

session.CreateFilter(department.Employees, "HireDate >= :dateParameter").SetParameter("dateParameter", DateTime.Now.AddDays(-30)); 

당신이해야 할 유일한 것은 제한을 적용 할 경우, 나는 하나의 선택이 방법을 객체 그래프를 가지고, 당신은 선택적으로 컬렉션을 열망 페치 할 수있는 방법이 있기 때문에 매핑 필터 옵션을 선호하는 것 .

더 복잡한 시나리오의 경우 Employees를 대상으로하는 쿼리가 더 좋을지라도 페이징과 같은 추가 작업을 수행하려는 경우 CreateFilter가 더 좋습니다.

관련 문제