当前位置: 首页 > 面试题库 >

NHibernate未来对象图有很多查询

归泽宇
2023-03-14
问题内容

给定一个使用Future调用的多层对象图:

var Dads = db.Sesshtml" target="_blank">ion.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。

附带一提,我认为方法名称不合适。

编辑:问题编辑后,方法名称现在确定。



 类似资料:
  • 问题内容: 我正在尝试在NHibernate中编写查询。我不在乎是否使用Criteria API或HQL,只是无法弄清楚如何编写查询。 这是我的模型: 我希望查询返回所有包含注释的工作流,该注释在注释的内容中包含特定的单词。 在伪SQL中,我将这样写: 问题答案: 我不确定Criteria API,但即使搜索仅存在于特定子类中的属性,HQL似乎也能很好地处理多态查询。我希望以下工作:

  • 问题内容: 信封:Akka 2.1,scala版本2.10.M6,JDK 1.7,u5 现在是我的问题:我有: 现在在第一行中,我有一个Future对象的Future,有什么方法可以在不阻塞当前线程的情况下将其转换为Future? Akka有什么方法吗?据我检查,我还没有发现…第一次发帖....不好意思的格式和组织…:〜P 问题答案: 简短答案(英语):flatMap dat sh!t 较短的答案

  • 通过nhibernate保存父对象的子对象有时只会导致不在表中插入子对象。这种方法在大多数情况下都有效,但在数千次中,只有几次孩子失踪。 这是一个大型多线程应用程序。 以下是子映射: 和儿童班: 父映射: 下面是父类 添加父项和子项的代码如下所示: 检查调用方是否已开始事务的机制似乎没有任何错误,并且调用方在不抛出异常并记录它的情况下不会回滚。我没有发现任何交易被回滚的痕迹。 父映射中的级联选项有

  • 问题内容: 我正在努力进行双向多对多映射,其中顺序在一侧很重要,而在另一侧则不重要。 我有两节课:程序和学生。 一个程序有很多学生,顺序很重要。 程序A 约翰 莎莉 赛斯 程式B 亚历克斯 赛斯 艾米 约翰 一个学生有很多程序,但是顺序在这里并不重要。 John 程序A 程序B 莎莉 程序A 赛斯 程序A 程式B 亚历克斯 程式B 艾米 程式B 因此,似乎我可以在程序和学生之间建立双向的多对多关联

  • 本文向大家介绍nhibernate 所有,包括了nhibernate 所有的使用技巧和注意事项,需要的朋友参考一下 示例 保存/更新/删除对象时,请检查关联并保存/更新/删除找到的所有对象。

  • 本文向大家介绍nhibernate Xml对应,包括了nhibernate Xml对应的使用技巧和注意事项,需要的朋友参考一下 示例 xml映射使用的hbm.xml文件是休眠映射文件。这是一个语法xml文件,其中包含对象/关系映射所需的元数据。元数据包括持久性类的声明以及属性(到列以及到其他实体的外键关系)到数据库表的映射。 将名为Entity.hbm.xml的文件添加到项目中,并将其设置为emb