NHibernate未来对象图许多查询

给定一个使用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()时,我看到这批文件穿过导线并显示在探查器中。

问题是枚举集合它仍然发送一个查询到数据库

例如。

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

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


这种行为是可以预料的。 你只是简单地告诉NHibernate从批处理数据库中获取两个集合,它按照所述的方式执行。 但是,你并没有告诉它它们有关系。 NH期货与期货不会在执行后将实体放在一起,除非通过加入被告知这样做。

如果您执行了没有期货的单独查询,您不会期望父实体突然收到子集合。 基本上,期货可以让你在一次往返中运行。 如果查询碰巧与多个子集合有共同的根(例如为了避免笛卡尔积),那么NH能够将多个集合“组合”为一个实体。

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

在附注中,我认为方法名称不合适。

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

链接地址: http://www.djcxy.com/p/51643.html

上一篇: NHibernate Future Object Graph Many Queries

下一篇: Unable to connect to Amazon web service mysql instance