(流畅)NHibernate进展事件的冗长交易?

时间:2011-11-24 13:40:04

标签: fluent-nhibernate sqlbulkcopy event-listener progress-indicator

我们已经连接了ISaveOrUpdateEventListener事件,希望我们可以将它绑定到一个非常大的模型的保存遍历期间访问的每个节点的进度条更新,但事件只在保存操作开始时触发一次(仅在启动Save()的节点上,而不是在任何子节点上。

还有其他更合适的事件可以听吗?

我们也尝试通过自己进行遍历来分解保存操作(分层模型),但这似乎会进一步降低性能。

也许我们正试图解决FNH无意使用的问题。我们是新手。

我们还使用SqlBulkCopy设置了另一种解决方案,如其他地方所推荐的那样。

我们已经看到FNH主要用于较小事务(OLTP)的评论,而不是我们的问题(大量数据的信号处理)所限制的穷举模型的类型。

背景:

我们正在尝试在更大的数据库项目中使用Fluent NHibernate,其数据来自相当复杂的实时分析(高频,多输入信号,长实验时间等)。在我们构建的原型中,我们看到目前非常可怕的等待时间,并需要挂钩某种可靠的进度指示器。

1 个答案:

答案 0 :(得分:0)

是的,现在已经确认 - 正如我在上面的评论中提到的那样。一个(可能的)解决方案是简单地转动Cascades并手动执行模型遍历并执行显式Save()调用。

这很有效,虽然它不像处理事件那样整洁。尽管如此,考虑到NHibernate的genuin设计,我打赌肯定会有某个地方被拦截的事件 - 问题就在于什么名称。 ...我打赌这里有人知道更多。

另外,为了提高性能,我们使用了无状态会话,体验了不同的批量大小,并定期/显式调用Flush()和Clear()。有关详细信息,请参阅以下文章:

http://davybrion.com/blog/2008/10/bulk-data-operations-with-nhibernates-stateless-sessions/

http://ideas-net.blogspot.com/2009/03/nhibernate-update-performance-issue.html

希望这有帮助。