NHibernate не может получить новые данные из базы данных - PullRequest
0 голосов
/ 29 июня 2009

Я использую NHibernate в качестве уровня доступа к данным для моего приложения ASP.NET MVC. Я также использую Карту структуры в качестве контейнера IoC. Я настроил карту Structre для создания фабрики сессий в виде одиночного и создания сессий для каждого запроса (InstanceScope.Hybrid). Я могу нормально выполнять базовые операции CRUD.

Теперь у меня есть фоновый процесс, запускаемый каждые 30 секунд, который использует несколько репозиториев (которые в свою очередь используют сеансы). И этот фоновый процесс по каким-то причинам не может подобрать новые данные. Может быть, я упускаю простую вещь. Я попробовал поискать в Google, но не смог найти ничего полезного. Это действительно помогло бы мне, если бы кто-то указал мне правильное направление.

EDIT:

Я не уверен, что у меня включен кэш второго уровня, я новичок в 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. И решит ли использование сеансов без сохранения состояния проблему, если настройки моей базы данных будут обновлены из другого приложения?

Ответы [ 3 ]

1 голос
/ 29 июня 2009

Если у вас включен кэш второго уровня, но у вас есть фоновый процесс, который обновляет базу данных без использования NHibernate, вы не увидите, как эти изменения произойдут. В этом случае использование кэша второго уровня не подходит.

0 голосов
/ 12 июля 2009

Я решил эту проблему, создав для этой цели отдельное консольное приложение. Не было элегантного решения, но оно все еще работало. Спасибо за все ваши ответы.

0 голосов
/ 29 июня 2009

Используете ли вы новую сессию каждый раз (за 30 секунд) до запуска ретрива в приложении backgroup?

включите show_sql в конфигурации hibernate или используйте hiberante profiler или sql profiler, чтобы определить, запускается ли sql каждый раз (30 секунд).

Трудно решить вашу проблему с вашим описанием.

...