2010-02-12 5 views
3

어리석은 nHibernate 멍청한 질문,하지만 어디서나 대답을 찾을 수 없습니다 ...nHibernate 표현식을 중첩 테이블과 일치 시키시겠습니까?

"제품"클래스가 성공적으로 제품 테이블 및 "sku"클래스에 매핑되었습니다. Sku는 "제품"의 하위 객체이고 DB의 두 테이블은 기본 키로 관련됩니다.

지금까지 모든 기본 nHibernate 구성 요소가 작동합니다. 데이터베이스에 대해 CRUD 연산을 성공적으로 실행할 수 있습니다. 나는 ... ... 같이 성공적으로

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("Name", nameSearchString)) _ 
    .List() 

을 표현 기반으로 쿼리를 만들 수 있습니다 그리고 그 결과는 성공적으로 예상 SKU의 자식 개체를 노출 제품 객체의 목록입니다. 에서

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("SkuCode", skuSearchString)) _ 
    .List() 

결과 "속성을 확인할 수 없습니다 : SkuCode가의 : 제품"

이 작동 : 나는 SKU 테이블에서 필드 이름에서 검색 위의 코드를 시도 할 경우, NHibernate에 오류가 발생

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Sku _ 
     .Add(Expression.Like("SkuCode", skuSearchString)) _ 
    .List() 

하지만 놀랍지 만 제품 오브젝트가 필요한 반면 Sku 오브젝트 만 반환합니다.

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .Add(Expression.Like("Name", nameSearchString)) _ 
     .CreateCriteria("Skus").Add(Expression.Like("SkuCode", skuSearchStrung)) _ 
    .List() 

을하지만 첫 번째 표현식이

가 어떻게이 SKU 테이블의 필드에 대해 Expression.Like을 실행할 수있는 유효한 경우에도, 전혀 아무 것도 반환하지 않습니다 :

이것은 또한 컴파일?

답변

3

나는 이것을 풀어 봤다. 다른 누군가가 발견 할 수 있도록 여기에 남겨 둘 것이라고 생각했다. 일이 이런 종류의 매우 저조한 문서화 된 것 같다 : http://mattthr.blogspot.com/2010/02/quey-across-join-in-nhibernate.html

:이 프레임 워크 내 불만에 대해 블로그에 한

Dim results As ArrayList = session.CreateCriteria(Of DataTransferObjects.Product) _ 
     .CreateAlias("Skus", "sku") _ 
     .Add(Expression.Or(_ 
     Expression.Like("Name", nameSearchString), _ 
     Expression.Like("sku.SkuCode", skuSearchStrung))) _ 
    .List() 

관련 문제