2
我刚刚将我的应用程序从LINQ2SQL转换为NHibernate,我试图弄清楚如何优化下面的例子。我尝试使用.Future方法,但是当我的会话关闭视图,然后尝试获取数据,我得到一个会话关闭错误。优化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;
}
所以我应该在哪里打开和关闭我的会议呢?在服务层?我不是很喜欢将会话对象传递给每个函数,并且您只能一次打开一个会话,所以如果我在使用多个回购时使用回购声明传递它,它将无法很好地工作? – Andrew 2010-09-16 08:33:50
你能解释一下吗? – LiamB 2010-09-16 09:42:46
存储库应该使用SessionFactory进行初始化,并使用'GetCurrentSession()'来获取会话。例如,绑定/解除绑定当前会话可以在Web应用程序的BeginRequest/EndRequest上完成。 – 2010-09-16 14:36:57