2012-08-17 2 views
1

NHibernate를 사용하여 프로 시저를 호출하고 매핑되지 않은 엔티티를 채운 다음 하위 엔티티 목록을 가져 오는 코드에 대한 질문이 있습니다.NHibernate - 매핑되지 않은 클래스에서 자식 엔티티 채우기

예를 보여 드리겠습니다. 세 기관 : 집,이자, 사용자 I 순위와 같은 몇 가지 추가 속성을했습니다 때문에 나는 집과 사용자 사이의 관계에 대한 클래스와 관심를 사용

class house 
string name; string title; string description; 
list<interest> users; 

은 내가 저장할 필요가 있음을 언급 .

class interest 
house houseinterested; 
user userinterested; 
int ranking; string descriptions; 

그리고 난이 지역 범위 withing에 모든 주택을 쿼리해야하기 때문에

class user 
string name 

는, 내가 저장 프로 시저에 대한 계산 (긴 위도 /를 전송) 것을하고있어 사용자 클래스, 및 그럼 난 여분의 속성 거리 내가보기에 표시해야합니다 반환합니다. 나는 (내가 그냥 검색하기 때문에, 내가 그 값을 저장하지 않습니다) 테이블에 거리를 매핑 할 해달라고

, 그래서 난 집에 유사한 다른 기업을 만들었지 만 한 거리 속성 (houseview) 그리고 난 CreateSQLQuery과 절차를 질의하고 있습니다 :

const string sql = "call imovel_within_area (:@orig_lat, :@orig_long, :@dist, :@take, :@skip, :@quartos, :@precomin, :@precomax)"; 
      var query = MvcApplication.Session.CreateSQLQuery(sql) 
       .SetParameter("@dist", distancia) 
       .SetParameter("@orig_lat", latitude) //-25.363882m 
       .SetParameter("@orig_long", longitude) // 131.044922m 
       .SetParameter("@take", resultados) 
       .SetParameter("@skip", ((pagina-1 * resultados))) 
       .SetParameter("@quartos", quartos.Value) 
       .SetParameter("@precomin", precomin.Value) 
       .SetParameter("@precomax", precomax.Value); 
       query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(Core.Domain.houseview))); 

지금 내가 관심있는 사용자의 목록을 채우려.

foreach (var housein houses.List<Core.Domain.houseview>()) 
      { 
       house.Where(x => x.Id == house.Id).ToList().First().Interest = 
       MvcApplication.Session.QueryOver<Core.Domain.House>() 
       .Where(x => x.Id == imovel.Id).List().First().Interessados; 
      } 

나는 쿼리에서 unmaped 열을 반환 없었 때문에,이 성능 문제에 허용되는 경우 내가이 작업을 수행하는 방법을 아주 확실하지 않다 나.

몇 가지 조언을 부탁드립니다.

감사

답변

0
List<Core.Domain.houseview> houseviews = ...; 

// load all wanted houses into session cache 
MvcApplication.Session.QueryOver<Core.Domain.House>() 
    .WhereRestrictionOn(x => x.Id).In(houseviews.Select(hv => hv.Id).Tolist()) 
    .Fetch(x => x.Interessados).Eager 
    .List() 

foreach (var view in houseviews) 
{ 
    view.Interessados = Session.Get<house>(view.House.Id).Interessadoes; 
} 
관련 문제