因此,我正在使用Nhibernate.Linq
API来运行查询。查询本身仅花费约50毫秒,但NHibernate返回结果所花费的总时间约为500毫秒。
查询如下session.Query<T>().Where(i => i.ForeignKey == someValue).Take(5).ToList().AsQueryable()
。从创建HQLQueryPlan
的调试日志到设置参数,打开连接,为C#对象水化并完成操作,此查询将在不到50毫秒的时间内执行。
但是,调试日志显示,NHibernate甚至花费了大约400毫秒的级联保存和更新,然后报告了Collection found:
日志的捆绑,这些日志似乎是Collection
的属性,我要的对象。我应该添加正在使用的ISession
是只读的,并且绝对没有修改或创建任何实体。在花费了这400ms之后,它会记录为刷新了0个更改。
为什么NHibernate在执行.Query<T>()
的过程中会级联保存/更新命令的负载,它是否试图确保检索到正确的数据?这是我设置的某些配置的结果吗?
答案 0 :(得分:1)
对于在事务内仅在以下情况下仅执行的查询,这种行为是可能的:
FlushMode.Always
FlushMode.Auto
(默认值)(因此为FlushMode.Commit
或FlushMode.Manual
)的值来禁用此行为您可以更改会话的FlushMode或在default_flush_mode
配置设置中指定默认的刷新模式。有关详情,请参见spec