目前我正在为我的应用程序开发存储库,延迟加载给我一个很好的性能推动,但是当我使用这样的代码块时它不可能
public IList<T> GetAll()
{
using (var session = SessionFactory.OpenSession())
{
try
{
return new List<T>(session.QueryOver<T>().Future());
}
catch (HibernateException)
{
throw;
}
finally
{
session.Flush();
}
}
}
因为session
在我完成之后被处理掉了,所以当我尝试在代码中读取我的对象的引用时,我将收到延迟加载异常。
我的问题是:
使用块(using (var session = factory.OpenSession))
的重要性是什么,
为什么在没有刷新它的情况下对存储库中的所有方法使用单个会话是不好的做法?
是否可以在使用块中使用延迟加载?
由于
答案 0 :(得分:0)
使用块的重要性是什么?
参考:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
using语句在对象中调用Dispose方法 正确的方式,(当你使用它如前所示)它也会导致 一旦调用Dispose,对象本身就会超出范围。内 使用块,该对象是只读的,不能修改或 重新分配。
Session
返回的.OpenSession()
对象实现IDisposable
为什么在不刷新存储库的情况下对存储库中的所有方法使用单个会话是不好的做法? 是否可以对使用块使用延迟加载?
我不太明白这个问题的后半部分,NHibernate中的Session
被视为工作单元,我相信您需要选择合适的上下文会话模式。
参考:http://nhibernate.info/blog/2011/03/02/effective-nhibernate-session-management-for-web-apps.html