我可能會使用Future<T>
方法,但我在理解如何優化它的使用方面有很多麻煩。所以這是我的簡單例子。nHibernate未來<T>,關於加載順序的困惑
三個對象,Member
,Player
,Character
Member {
Player Player { get; set; }
Player {
IList<Character> Characters { get; set; }
}
因此,基本上,一個成員也是一個球員,一個球員有許多字符。夠簡單。 (這個抽象的原因是爲了保持Member
輕巧,所以它只能用於身份驗證和角色,其中更大量的數據具有附加到Player
類中使用。)
那麼,我有一個方法,我想要查詢Player
所有的Character
。所以我下面的查詢設置...
session.QueryOver<Player>()
.Fetch(context => context.Characters).Eager
.Take(1)
.Future<Player>();
session.QueryOver<Character>()
.Future<Character>()
.Take(10);
return session.QueryOver<Member>()
.Where(model)
.Fetch(context => context.Player).Eager
.List()
.Take(1)
.SingleOrDefault()
.Player;
我在這裏的想法是,從我的理解有關的方式Future<T>
作品(可能是遙遠的,它會急於負載Player
(1:1 ),它將在相同的數據庫旅程中執行查詢IList<Character>
,限制爲10次結果,每次旅行只需要1個玩家,每次遊覽1個會員,每次遊覽最多10個字符。然而nhProf
告訴我我正在使用無限的請求,有人可以向我解釋這裏發生了什麼嗎?我只是誤解了這些方法的工作原理嗎?或者任何人都可以提供一個例子,它是有點更可行?我不明白HQL,所以我不能使用CreateCriteria
方法。
這真的很好,真的很有用。我很難找到很多解釋未來如何運作的東西,我所找到的每一個資源都假設你只是在本質上'理解'它們是什麼。 Ayende的博客有一個非常好的帖子,但它使用了很多HQL,並且這個例子對於我的經驗不足的人來說完全沒有冗長。 – Ciel 2011-03-29 13:10:14
即使使用此代碼,我仍被告知我正在使用「未綁定結果集」。但我不明白爲什麼。 – Ciel 2011-03-29 13:43:07
@Ciel準確的代碼是什麼?沒有期貨的查詢或三個查詢的例子?您是否已將.SetMaxResults()添加到上面的查詢中?對不起,我還沒有使用NHProf,所以我無法試驗。 – 2011-03-29 14:31:37