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