NHibernate +并发编辑:如何获得变更通知?

Kri*_*nde 6 nhibernate concurrency notifications

我正在研究使用NHibernate来处理业务应用程序中的持久层.现在,我想知道如何处理NHibernate中的并发编辑/更新,或者更具体地说,如何让我的应用程序的多个分布式实例知道一个用户更改了给定的数据集.

不是在寻找版本控制,即面对并发编辑的一致性 - 我知道NHibernate支持乐观/悲观并发,我目前使用乐观并发来处理StateStateException.

我只想知道:假设用户A更改了数据集中的一行,如何让用户B知道发生了更改,以便可以重新加载数据集?现在,我懒得使用NHibernate将大量客户加载到网格中.现在,如果添加了新客户,我想将其添加到网格中,而无需再次重新加载整个数据 - 应用程序的第一个问题是性能.

此外,NHibernate会优雅地处理对现有行的更改吗?它是否会以某种方式检测底层数据库中的更改并更新内存中的.NET对象,以便访问其属性将产生更新的值?

我想过使用一个额外的表,保存更新对象的ID以及时间戳来自己刷新项目,但如果NHinbernate提供了自己的东西,那将是一个很好的选择,显然......

Mau*_*fer 3

为此,您需要数据库级通知/事件。也就是说,数据库引擎必须提供通知。例如SQL Server就有这个功能。NHibernate 在应用程序上运行,因此它本身可能做的就是轮询数据库以了解更改(您使用附加表的想法看起来像轮询),我们都知道这不好。NHibernate 的SysCache2利用 SqlCacheDependency 在数据库发出通知时使缓存条目无效,但我不知道它可以引发应用程序本身消耗的任何事件(无论如何这都是没有用的,因为二级缓存不与整个实体一起工作)。

实现此目的的另一种可能方法是让 NHibernate 事件侦听器在任何更新后将广播消息放置在总线上,然后每个应用程序实例将接收此消息并相应地从数据库重新获取。