我可能会使用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