5

나는 다음과 같은 데이터 모델이 있습니다수행하는 방법에 여러는 NHibernate에 기준 API와 결합

Page 
- Id  // Pk 
- Type // int 

Section 
- Id  // Pk 
- Page // Fk 

Comment 
- Id  // Pk 
- Section // Fk 
- Date // DateTime 

내가 특정 페이지 (말 page.id = 2 페이지와 관련된 모든 의견을 조회하기 위해 노력하고있어 .Type = 1). 나는 이런 식으로 시도 :

var criteria = session.CreateCriteria<Comment>() 

    .Add(Restrictions.Eq("Section.Page.Id", pageId)) 
    .Add(Restrictions.Eq("Section.Page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

그러나,이 내가 오류가 말한다 얻을로 "페이지 : TestNamespace.Comment를 속성을 확인할 수 없습니다"실패합니다. 이것은 일반적으로 매핑 오류를 나타낼 수 있지만 다른 모든 경우에 사용할 수 있으므로 쿼리의 오류가 있다고 생각하는 경향이 있습니다.

경우에 따라 Comment.Section이 null 일 수도 있습니다 (섹션이나 페이지와 관련없는 주석이 있음). 이 경우 나는 그 주석을 무시하고 싶다.

어떤 조언이 필요합니까?

감사합니다.

+0

를 탐색 호출을 사용할 수 있습니까? – Richard

+0

음, 나는 어딘가에서 그 코드를 복사했습니다. 상실은 실제로는 주석이어야합니다. 게시물을 편집하고 오류를 수정했습니다. – user315648

답변

4
var criteria = session.CreateCriteria<Comment>() 
    .CreateAlias("Section", "section") 
    .CreateAlias("section.Page", "page") 
    .Add(Restrictions.Eq("page.Id", pageId)) 
    .Add(Restrictions.Eq("page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

귀하의 의견에 따라 코드가 업데이트되었습니다. 두 번째 줄이 특별히 추가되었으며 세 번째 줄은 두 번째 줄의 별칭을 속성 대신 사용했습니다.

+0

오류 : 오류 : 42P01 : 테이블 – user315648

+0

의 FROM 절 항목이 누락되었습니다. 업데이트 된 답변을 확인하십시오. – Meligy

+0

이제 작동합니다! 감사! – user315648

0

당신은 추가 CreateCriteria 당신이 기준을 기반으로하는 손실 유형에 대한 정의를 추가 할 수 데이터베이스 구조

var criteria = session.CreateCriteria<Comment>() 
       .Add(Restrictions.Ge("Date", start)) 
       .Add(Restrictions.Lt("Date", end)) 
       .CreateCriteria("Section") 
       .CreateCriteria("Page") 
       .Add(Restrictions.Eq("Id", pageId)) 
       .Add(Restrictions.Eq("Type", pageType)); 
관련 문제