Вот сценарий:
У меня есть приложение winforms, использующее NHibernate. При запуске я заполняю DataGridView результатами запроса NHibernate. Эта часть отлично работает. Если я обновлю запись в этом списке и сброслю сеанс, обновление получит базу данных. После закрытия формы после обновления я вызываю метод для получения списка объектов, чтобы снова заполнить DataGridView, чтобы получить изменения, а также получить любые другие изменения, которые могли произойти кем-то другим. Проблема в том, что запись, которая была обновлена, NHibernate не отражает изменения в списке, который она дает мне. Когда я вставляю или удаляю запись, все работает нормально. Именно когда я обновляюсь, я получаю такое поведение. Я сузил его до NHibernate с их механизмом кэширования. Я не могу найти способ заставить NHibernate извлекать данные из базы данных вместо использования кэша после обновления. Я писал на форумах NHibernate, но предложения, которые они мне дали, не сработали. Я заявил это, и никто не ответил в ответ. Я не собираюсь заявлять, что я пытался, если я не сделал это правильно. Если вы ответите чем-то, что я попробовал точно, я укажу это в комментариях к вашему ответу.
Это код, который я использую для получения списка:
public IList<WorkOrder> FindBy(string fromDate, string toDate)
{
IQuery query = _currentSession.CreateQuery("from WorkOrder wo where wo.Date >= ? and wo.Date <= ?");
query.SetParameter(0, fromDate);
query.SetParameter(1, toDate);
return query.List<WorkOrder>();
}
Сессия передается классу при его создании. Я также могу опубликовать свой файл сопоставления, но я не уверен, что с ним что-то не так, поскольку все остальное работает. Кто-нибудь видел это раньше? Это первый проект, который я использовал NHibernate, спасибо за помощь.