Обновление дочерних объектов NHibernate - PullRequest
3 голосов
/ 15 декабря 2008

У меня есть объект с именем 'category', и таблица выглядит следующим образом.

CATEGORY
-------------------------------------------------
ID                 int  
ParentCatalogID    int  
ParentCategoryID   int << This is the ID of this table 
Position           int  
Title              nvarchar(128)    
Description        nvarchar(1024)   
LastUpdated        datetime 
DateCreated        datetime 
IsActive           bit  

При вставке, обновлении, удалении и т. Д. Все работает как обычно Сопоставление в порядке.

Данные из этой таблицы отображаются в html-списке, который является «вложенным» (отсюда и самореференция). Все это прекрасно выглядит.

Когда Position обновляется (двигаться вверх ||, двигаться вниз), обновленный список отражает изменение, и рассматриваемый элемент списка перемещает свою позицию в списке.

Проблема заключается в том, что ParentCatalogID изменяется (переместите влево ||, переместитесь вправо, чтобы стать дочерним элементом вышеупомянутой записи в списке). Данные, переданные методу рендеринга списка, не отражают изменения, пока страница обновляется нажатием клавиши F5 и нажатием кнопки «Обновить» (перезагрузка страницы).

Это даст вам базовое представление о том, как:

foreach (nc_Category category in root.nc_Categorys)
{
  HtmlControl listItem = BuildListItemFromCategory(category);
  if (category.nc_Categorys.Count > 0)
      {
        listItem.Controls.Add(BuildListFromCategorys(category.nc_Categorys));
      }
  mainList.Controls.Add(listItem);
}

Это все отлично работает. Проблема заключается в том, что в строке >> foreach (nc_Category category in root.nc_Categorys) root.nc_Categorys (дочерние элементы текущего объекта) не отражают изменения, внесенные до обновления страницы. Я могу видеть это в отладке. Поэтому NHibernate не получает обновления при отложенной загрузке.

Изменения зафиксированы, сброшены и видны в базе данных. Они не возвращаются NHibernate.

Я пробовал метод Refresh () на объекте, это не работает. Это дети объекта, которые должны быть обновлены.

Я попытался очистить сеанс и многое другое, но безрезультатно. Это происходит только при изменении ParentCategoryID. При изменении Position они отображаются сразу.

Кажется, что похоже, но не уверен: http://jira.nhibernate.org/browse/NH-1604

Я отвечаю. Перенаправляю на ту же страницу (юк). Работает нормально, но в этом нет необходимости. Ответ очень ценится.

1 Ответ

0 голосов
/ 23 декабря 2008

Может ли это быть связано с тем, что в разных точках вашего приложения используются разные сеансы, я знаю, что у опции jiber hibernate есть концепция использования одного и того же сеанса гибернации для внутреннего сервлета, а также для интерфейса jsp. *

...