2014-12-27 4 views
1

에 의해 페이징을 명령했다.
예를 들어, 내가 2 개의 엔티티 인 경우 : 1) 동물 이름의 엔티티리스트 (호랑이) 2) 동물 이름의 엔티티리스트 (고양이, 개) 그런 다음 두 번째 엔티티를 먼저 가져오고 싶습니다. 왜냐하면 고양이의 'c'는 호랑이의 't'보다 낮기 때문입니다) 그리고 그 이후의 첫 번째 것이기 때문입니다.NHibernate에 나는 다음과 같은 매핑이 게으른 로딩 가방

당연히 내 페이징에 영향을 미칠 것입니다. 왜냐하면 호랑이가있는 엔티티가 엔티티 ID로 페이징을 받으면 엔티티가 첫 페이지에 표시 될 수 있지만 엔티티 목록에서 가져올 가능성이 있기 때문입니다. 이름이 있으면 다른 페이지에 표시 될 수 있습니다.

미리 감사드립니다. 마이크.

p.s. - 기준을 사용하고 있습니다.

+0

누구에게 도움을 주시겠습니까? :-) – user1894419

+0

내부 봉지를 게으른 상태로로드해야하는 이유는 무엇입니까? 귀하의 요청에 따라, 그것은 항상 액세스됩니다. –

답변

0
var entityIds = session.CreateCriteria<Entity>() 
    .CreateAlias("EntityList", "el") 
    .AddOrder(Order.Asc("el.Name")) 
    .SetProjection(Projections.Id) 
    .List<int>(); 

var entities = session.CreateCriteria<Entity>() 
    .Add(Expression.In(Projections.Id, entityIds)) 
    .SetFetchMode("EntityList", FetchMode.Eager) 
    .List<Entity>(); 

// resort again 
return entityIds.Select(id => entities.First(e => e.Id == id)).ToList();