我刚刚将我的应用程序从LINQ2SQL转换为NHibernate,我正在试图找出如何优化以下示例。我尝试使用.Future方法但是当我的会话关闭视图然后尝试获取数据并且我得到会话关闭错误。
有没有人知道这种事情的最佳做法?我有很多场景,我在LINQ中调用一个方法,使用NHibernate获取数据,但我不想返回不需要的数据。
获取所有书籍的方法:
public IEnumerable<Book>GetAllBooks()
{
try
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.CreateCriteria<Widget>().ToList<Book>();
}
}
catch (Exception ex)
{
//Error stuff here
}
}
然后扩展该功能的方法
public IEnumerable<Book> GetDefaultBookReadingList()
{
return from p in GetAllBooks()
where p.IsDefault
select p;
}
答案 0 :(得分:1)
关闭会话后(会在using
块结束时发生,您将无法检索任何延迟加载的数据。
根据应用程序类型,会话管理会有所不同,但存储库不应该打开和关闭会话。
在Web应用程序中,最常见的模式是每个请求的会话。
在Windows应用程序中,它可以是每个业务事务的对话,或者在更简单的实现中,每个视图的会话(模型)