当我使用一次性方法时,如何促进Nhibernate中的延迟加载?
目前,我正在为我的应用程序开发存储库,延迟加载给了我很大的性能提升,但是在我使用这样的代码块时,这是不可能的当我使用一次性方法时,如何促进Nhibernate中的延迟加载?,nhibernate,fluent-nhibernate,lazy-loading,Nhibernate,Fluent Nhibernate,Lazy Loading,目前,我正在为我的应用程序开发存储库,延迟加载给了我很大的性能提升,但是在我使用这样的代码块时,这是不可能的 public IList<T> GetAll() { using (var session = SessionFactory.OpenSession()) { try { return new List<T>(session.QueryO
public IList<T> GetAll()
{
using (var session = SessionFactory.OpenSession())
{
try
{
return new List<T>(session.QueryOver<T>().Future());
}
catch (HibernateException)
{
throw;
}
finally
{
session.Flush();
}
}
}
public IList GetAll()
{
使用(var session=SessionFactory.OpenSession())
{
尝试
{
返回新列表(session.QueryOver().Future());
}
捕获(休眠异常)
{
投掷;
}
最后
{
session.Flush();
}
}
}
由于会话
在我完成后被释放,因此当我尝试读取代码中对象的引用时,我将收到延迟加载异常
我的问题是:
(使用(var session=factory.OpenSession))
的重要性是什么,
为什么对存储库中的所有方法使用单个会话而不刷新它是一种不好的做法.OpenSession()
返回的Session
对象实现了IDisposable
为什么对存储库中的所有方法使用单个会话而不刷新它是一种糟糕的做法?
是否可以对using块使用延迟加载
我不太理解问题的后半部分,NHibernate中的会话
被视为工作单元,我相信您需要选择合适的上下文会话模式
- 每个线程的会话数
- 每个请求的会话(对于web应用程序)
- 每个会话的会话数