2009-08-14 2 views
1

클래스 계층 구조가 하나의 테이블로 매핑되었습니다. 하나의 수퍼 클래스와 8 개의 다른 하위 클래스가 있습니다. 예 : 많은 검색어가 가져와야합니다. 특정 날짜에 대해서만 하위 클래스 중 2 개를 선택합니다. 테이블에는 nhibernate 자체에서 사용하는 판별 자 열이 있습니다. 그러나 쿼리를 위해 LINQ를 사용할 때이 식별자는 사용할 수 없기 때문에이 식별자를 사용할 수 없습니다.nhibernate 테이블 pr 계층 구조 LINQ를 사용하여 특정 클래스 가져 오기

nhibernate를 사용할 때 특정 하위 클래스를 가져 오는 데만 사용되는 트릭이 있습니까?

이제는 주어진 기간 내에 모든 하위 클래스를 가져 오는 Linq 4 Nhiberneate 쿼리가 있습니다. 그리고 Linq 4 객체를 사용하여 필요한 하위 클래스를 필터링합니다.

테이블의 판별 자 열을 속성으로 표시하여 where 절을 만들 수 있습니까?

답변

2
당신이

from subclass 
where subclass.DateTime = :myDateTime 

또한 문서를 할 거라고 그래서 HQL 질의 서브 클래스에서

는, 클래스에 의해 이루어집니다 예를 들어, 당신은 특별한 클래스 속성으로 계층 구조를 조회 할 수 있습니다 말 :

from Eg.Cat cat where cat.class = Eg.DomesticCat 

I 돈 이것이 Criteria API 또는 NH Linq Provider에서 가능한지는 알 수 없습니다.

당신은 항상 정확한 시간에 모든 인스턴스를 얻을하고 클라이언트 측, 예를 필터링 할 수 있습니다 : 당신이 질의하고 클래스의 부분 집합이 항상 동일한 경우

var allCandidates = from super in session.Linq<SuperClass>() 
    where super.Date > DateTime.Now.AddDays(-1) 
    select super 
var results = from candidate in allCandidates 
    where candidate.GetType() == typeof(SubClass) 
    select candidate 

이 약간 불쾌한, 그리고 계층 구조에 다른 클래스를 삽입하고이를 쿼리하는 것이 더 나을 것입니다.

관련 문제