Как заставить NHibernate попасть в базу данных при запросе сущности? - PullRequest
4 голосов
/ 27 марта 2010

У меня есть ситуация, когда мне нужно, чтобы NHibernate игнорировал свои кэши и просто обращался к базе данных, поскольку данные изменились (другой пользователь на другом компьютере изменил данные). Как это возможно? Пока что мне не повезло. Получить, загрузить, запрос Linq, не имеет значения. NHibernate не получает самые последние данные.

1 Ответ

7 голосов
/ 27 марта 2010

Для кэша второго уровня вы должны очистить его, используя ISessionFactory.Evict(typeof(T));. Для кеша первого уровня вы можете просто позвонить ISession.Clear();.

И если вы не знаете, когда очищать кэш второго уровня, вам следует отправить некоторую информацию из другого приложения в это (через сокеты или веб-сервис ...). Если это невозможно, вы можете создать таблицу в базе данных, которая сообщит вам, когда данные в базе данных были изменены в последний раз, а затем проверить запись в этой таблице. Если он был изменен, то вы очищаете кеши. Просто убедитесь, что запись обновляется каждый раз, когда другое приложение изменяет базу данных (вы можете сделать это с помощью триггеров или проверить системные таблицы).

Если вы используете триггеры, не забывайте игнорировать запись, если вы обновляете с помощью nhibernate. Вы можете сделать это с некоторой переменной, для которой установлено время последнего обновления, и сравнить ее с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...