2012-08-17 50 views
1

我有一個關於我編寫的代碼來調用使用NHibernate的過程的問題,填充未映射的實體,然後獲取子實體列表。NHibernate - 從未映射的類填充子實體

我會告訴你一個例子。三個實體:房子,興趣,用戶

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

我使用興趣作爲一類房屋和用戶之間的關係,因爲我喜歡的排名了一些額外的屬性,評論說,我需要保存。

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

而且用戶類

class user 
string name 

,因爲我需要查詢所有的房子withing的區域範圍,我做了一個存儲過程計算(發送緯度/長),和然後我返回一個額外的財產距離,我需要顯示的意見。

我不想給距離映射表(因爲我只是找回它,我從來沒有存儲值),所以我已經建立了類似的另一實體的房子,但與距離財產(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; 
}