1

我们已经连接了 ISaveOrUpdateEventListener 事件,并希望我们可以将它与在一个相当大的模型的保存遍历期间访问的每个节点的进度条更新联系起来,但是该事件仅在保存操作开始时触发一次(仅在节点上Save() 是在哪个子节点上启动的,而不是在任何子节点上)。

还有其他更适合听这个的事件吗?

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

也许我们正在尝试解决一个 FNH 并非旨在解决的问题。我们是新手。

我们还按照其他地方的建议,使用 SqlBulkCopy 设置了替代解决方案。

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

背景:

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

4

1 回答 1

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

希望这可以帮助。

于 2011-11-25T09:02:55.463 回答