两个应用程序,一个数据库,NHibernate

Two applications, one database, NHibernate

我目前正在开发两个独立的应用程序,一个 Microsoft WPF 应用程序和一个 Windows 服务应用程序。

Windows 服务应用程序负责在特定时间间隔打开邮箱,如果有新邮件,则在 SQL 服务器数据库中创建一些与这些邮件对应的条目。此应用程序使用 NHibernate 作为数据库的 ORM。

另一方面,我有一个 Microsoft WPF 应用程序,它允许其用户与 Windows 服务应用程序创建的邮件进行交互。此交互涉及读取和写入与 Windows 服务应用程序正在使用的完全相同的数据库。 Microsoft WPF 应用程序还使用 NHibernate 作为针对数据库的 ORM(完全相同的项目,repository/unit 工作模式)。

问题是,当两个应用程序同时运行时(意图和设计),通过NHibernate 提供给各自应用程序的数据将不相同。我假设这是因为缓存功能,并且 Microsoft WPF 应用程序的 NHibernate 实例不知道 Windows 服务应用程序的 NHibernate 实例对数据库所做的更改(反之亦然)。

关于如何纠正这种行为有什么建议吗?我查看了 IStatelessSession 界面,但我不太喜欢它。有没有办法强制 NHibernate 仅在编程指定的时间刷新其状态?

感谢您的回复!

NHibernate 将在会话的生命周期内跟踪其对象,除非您手动 Evict() 来自会话的实体。根据您的应用程序的工作方式,您可以创建新的短期会话来查询数据库条目列表,并创建另一个会话来处理获取和更新单个项目。创建一个会话并不太昂贵(创建会话工厂是,但你只需要一个)并且你不会被迫绕过 NHibernate 的会话缓存。