会话上的Nhibernate延迟加载错误。获取

时间:2012-03-19 11:46:26

标签: nhibernate lazy-loading

我在我的控制器上收到一些int,这是我用来获取实体的参数。 这个实体有List Collection,我需要与我的实体一起加载。 我无法访问session.Fet中的Fetch方法,所以我不知道如何实现。 在我的视图中,我尝试访问我的集合,如entity.Collection,它会抛出错误,没有会话或会话已关闭

这是我的代码

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 个答案:

答案 0 :(得分:1)

您的实体拥有一个带有代理(非真实集合)的集合属性。当您关闭会话时,您不能使用延迟加载,因此,您需要获取真正的集合对象。 你应该通过查询得到它:

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