2010-03-19 3 views
4

나는, '많은' "사이트입니다 일대 데이터베이스와 관련, '하나'"계정 "입니다, 기준 방법에 대해 질문이 있습니다 ", 내가 쓸 때 CreateCriteria() 뭔가 옳지 않습니다. 이처럼NHibernate에 사용하는 기준은 첫째,()

: 그것은 실행 있어요 전에 SessionFactory.OpenSession().CreateCriteria(typeof(Account)).List().Count();

, 나는 SQL이 SELECT COUNT(*) FROM table해야한다고 생각하지만, SQL은 SELECT id, siteurl...FROM table입니다. 그럼이게 뭐가 잘못 됐니? 어떻게 해결할 수 있습니까?

그리고 First() 방법은 SELECT TOP1 ...FROM table해야하지만, 내가, 나를 도와주세요 Nhiberate 신인 해요 SELECT ...FROM table

입니다.

답변

10

쿼리를 실행 한 후 데이터베이스 외부에서 호출하는 Count 메서드가 마지막에 실행되기 때문에 이런 현상이 발생합니다. 메모리의 목록에있는 요소 만 계산합니다. 당신이 찾고있는 것을 얻기 위해 투영법을 사용할 수 있습니다 :

var count = session 
    .CreateCriteria<Account>() 
    .SetProjection(
     Projections.Count(Projections.Id()) 
    ) 
    .UniqueResult<long>(); 
+0

"Count"메소드에서 항상 개미 IProjection을 지정해야합니까? 'Count (*)'와 같은 속성이 필요 없다면 어떻게 될까요? – monstr

관련 문제