NHibernate未来对象图很多查询

Fir*_*den 7 sql nhibernate future batch-file

给定使用Future调用多级对象图:

var Dads = db.Session.Query<Parent>().Where(P => P.EntityKey == Id)
             .ToFuture<Parent>();
var Kids = db.Session.Query<Kid>().Where(K => K.Parent.EntityKey == Id)
             .ToFuture<Kid>();
Run Code Online (Sandbox Code Playgroud)

当我调用var Dad = dads.ToList()时,我看到批处理通过导线并显示在探查器中.

问题是在枚举集合时它仍然向db发送一个查询

例如.

for each (Kid kid in Dad.Kids) // This seems to hit the database 
{
   Teach(kid);
}
Run Code Online (Sandbox Code Playgroud)

发送SQL查询并点击数据库以获取每个孩子.为什么没有填充对象图?或者这是预期的行为?

Flo*_*Lim 4

这种行为是可以预料的。您只需告诉 NHibernate 从数据库中批量获取两个集合,它就会按照指示执行操作。然而,你并没有告诉它它们是相关的。带有 Future 的 NH 查询在执行后不会将实体放在一起,除非它们被告知通过连接这样做。

如果您在没有 Future 的情况下执行单独的查询,您不会期望父实体突然填充子集合。基本上,Futures 允许你在一个往返中运行一些东西。如果查询碰巧与多个子集合具有共同的根(例如,为了避免笛卡尔积),则 NH 能够将多个集合“组合”为一个实体。

不幸的是,与 NH LINQ Api 结合,该ToFuture()方法似乎在当前(NH 3.0 或 3.1)实现中提出了问题。在这种情况下,您可能需要使用 QueryOver Api。

顺便说一句,我认为方法名称不合适。

编辑:编辑问题后,方法名称现在可以了。