Для кэша второго уровня вы должны очистить его, используя ISessionFactory.Evict(typeof(T));
. Для кеша первого уровня вы можете просто позвонить ISession.Clear();
.
И если вы не знаете, когда очищать кэш второго уровня, вам следует отправить некоторую информацию из другого приложения в это (через сокеты или веб-сервис ...). Если это невозможно, вы можете создать таблицу в базе данных, которая сообщит вам, когда данные в базе данных были изменены в последний раз, а затем проверить запись в этой таблице. Если он был изменен, то вы очищаете кеши. Просто убедитесь, что запись обновляется каждый раз, когда другое приложение изменяет базу данных (вы можете сделать это с помощью триггеров или проверить системные таблицы).
Если вы используете триггеры, не забывайте игнорировать запись, если вы обновляете с помощью nhibernate.
Вы можете сделать это с некоторой переменной, для которой установлено время последнего обновления, и сравнить ее с ней.