2013-02-10 111 views
1

我試圖找到一種更好的方式來加載比這個關係:急切加載()獲取後的關聯

result = session.Get<Author>(id); 
Course course = result.Courses.FirstOrDefault(); 

我可以QueryOver API做到這一點是這樣的:

result = session.QueryOver<Author>() 
       .Where(item => item.Id == id) 
       .Fetch(item => item.Courses).Eager 
       .SingleOrDefault(); 

我想它會生成相同的SQL,但它太冗長了。

有沒有辦法做下面的事情?

session.Fetch(result, author => author.Courses); 

回答

1

獲取是由映射驅動的。如果它真的有意義,改變你的映射(但我不會這麼做)。沒有構造映射的運行時切換。

從我的經驗來看,Get(id)期間的select語句不是問題...而對於N + 1,您已經在您的問題中顯示出更好的解決方案。

有趣的閱讀關於eagar loading:http://nhforge.org/wikis/howtonh/lazy-loading-eager-loading.aspx