2012-03-19 55 views
0

我在我的控制器上收到一些int,這是我用於獲取實體的參數。 這個實體有List Collection,我需要和我的實體一起加載。 我無法訪問session.Get中的Fetch方法,所以我不知道如何實現。 當我認爲我試圖訪問我的收藏喜歡entity.Collection它拋出一個錯誤,沒有會話或會話關閉Nhibernate會話上的延遲加載錯誤。獲得

這裏是我的代碼

public ActionResult Details(int id) 
{ 
    MyDomain.Property data = null; 
    using (//open session) 
    { 
     using (//using transaction) 
     { 
      data = session.Get<MyDomain.Property>(id);      
      //I need to load Photo() collection. 
      transaction.Commit(); 
     } 
    } 
    return PartialView("DetailsPartial", data);   
} 

回答

1

你的實體擁有一個集合的性質與代理(不是真正的收集)。關閉會話時,您不能使用延遲加載,因此,您需要獲取真正的收集對象。 你應該得到它與查詢:

Session.QueryOver<Entity>() 
.Where(entity => entity.Id == id) 
.Fetch(entity => entity.CollectionProperty).Eager 
.SingleOrDefault<Entity>();