NHibernate不同会话之间的数据不一致

时间:2012-02-08 02:47:27

标签: c# nhibernate session fluent-nhibernate

我正在使用流畅的NHibernate和Sqlite构建一个winform系统。系统启动时会有许多线程在运行。所以我使用每个会话的每个线程策略来解决会话并发问题。然后我发现不同会话之间存在不一致的数据。所以,我开始使用二级缓存在不同的会话中共享数据。但是,我仍然发现我通过一个会话更新对象,然后我通过另一个会话获得更新的对象,我看到返回的对象是陈旧的。 我猜第二级缓存在数据更新时不会通知第一级缓存。怎么解决?

配置:

  1. 二级缓存提供程序:NHibernate.Caches.SysCache

  2. Fluent映射:Cache.ReadWrite();在classmap中

2 个答案:

答案 0 :(得分:1)

您应该将每个会话用作工作单元。当你完成后,处理它并获得你需要的下一个会话的新节目。

答案 1 :(得分:0)

您的更改实际进入数据库的唯一方法是通过会话刷新。

有3个事件会导致会话刷新: 你通过调用session.flush()来告诉它。 2.会议正在结束 3.一个select语句即将执行

如果您尚未触发刷新,则您的数据尚未在数据库中。