NHibernate未来对象图很多查询

时间:2011-03-25 16:15:14

标签: sql nhibernate batch-file future

给定使用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>();

当我调用var Dad = dads.ToList()时,我看到批处理通过电汇并显示在分析器中。

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

EG。

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

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

1 个答案:

答案 0 :(得分:4)

这种行为是可以预期的。你只是告诉NHibernate从一个批处理中获取数据库中的两个集合,它正如所说的那样。但是,你并没有告诉它它们是相关的。 NH Queries with Futures在执行后不会将实体放在一起,除非他们被告知通过连接这样做。

如果您在没有Futures的情况下执行单独的查询,则不会指望Parent实体突然填充子集合。基本上,Futures允许您在一次往返中运行。如果查询恰好具有包含多个子集合的公共根(例如,为了避免使用笛卡尔积),则NH能够将多个集合“组合”到一个实体中。

不幸的是加入NH LINQ Api和ToFuture()方法似乎在当前(NH 3.0或3.1)实现中造成问题。在这种情况下,您可能需要使用QueryOver Api。

另一方面,我认为方法名称不合适。

编辑:编辑问题后,方法名称现已正常。