NHibernate无法从数据库中获取新数据

时间:2009-06-29 14:34:02

标签: asp.net-mvc nhibernate structuremap

我使用NHibernate作为ASP.NET MVC应用程序的数据访问层。我也使用Structure Map作为IoC容器。我已配置Structre map以将会话工厂创建为单例并基于每个请求创建会话(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应用程序中使用过。如果我的数据库设置是从其他应用程序更新的,那么使用无状态会话可以解决问题吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你是否每次(30秒)都使用新的激情,然后才能在你的背景应用程序中进行后退?

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

很难用您的描述来解决您的问题。

答案 2 :(得分:0)

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