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