0

我使用 NHibernate 作为我的 ASP.NET MVC 应用程序的数据访问层。我还使用 Structure Map 作为 IoC 容器。我已将 Structre 映射配置为将会话工厂创建为单例并基于每个请求(InstanceScope.Hybrid)创建会话。我能够很好地进行基本的 CRUD 操作。

现在,我有一个每 30 秒运行一次的后台进程,它使用一些存储库(这些存储库又使用会话)。而且这个后台进程由于某种原因无法获取新数据。也许我错过了一件简单的事情。我尝试使用谷歌搜索,但找不到任何有用的东西。如果有人指出我正确的方向,那真的会对我有所帮助。

编辑:

我不确定我是否启用了二级缓存,我是 NHibernate 的新手,我的 hibernate 配置文件粘贴在下面。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.connection_string">Data Source=.\SQLEXPRESS;Initial Catalog=Map.db;Integrated Security=True</property>
    <property name="show_sql">true</property>
    <mapping assembly="Infrastructure"/>
  </session-factory>
</hibernate-configuration>

我想知道的主要事情是,是否存在已经在使用 NHibernate 的典型 Web 应用程序中使用的设计/设计模式。如果我的数据库设置是从不同的应用程序更新的,那么使用无状态会话会解决问题吗?

4

3 回答 3

1

如果您启用了二级缓存,但有一个后台进程正在更新数据库而不通过 NHibernate,那么您将不会看到这些更改通过。在这种情况下,使用二级缓存是不合适的。

于 2009-06-29T14:38:05.980 回答
0

在您的 backgroup 应用程序中触发 retreive 之前,您是否每次(30 秒)都使用一个新的 sssion?

在休眠配置中启用 show_sql 或使用 hiberante profiler 或 sql profiler 来查找每次是否触发 sql(30 秒)。

你的描述很难解决你的问题。

于 2009-06-29T15:38:11.383 回答
0

我为此目的创建了一个单独的控制台应用程序来解决这个问题。这不是一个优雅的解决方案,但它仍然有效。感谢您的所有回答。

于 2009-07-12T08:16:25.687 回答