NHibernate子对象更新

时间:2008-12-14 22:59:57

标签: nhibernate refresh children bag

我有一个名为'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被更改时(向左移动||向右移动以成为上述列表条目的子项)。传递给列表呈现方法的数据不反映更改UNTIL通过按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);
}

一切正常。问题是在行&gt;&gt; foreach (nc_Category category in root.nc_Categorys) root.nc_Categorys(当前对象的子项)不会反映在刷新页面之前所做的更改。我可以在调试中看到这一点。所以当延迟加载时,NHibernate没有得到更新。

更改在数据库中提交,刷新并可见。它们不是由NHibernate检索的。

我在对象上尝试了Refresh()方法,这不起作用。需要刷新对象的子项。

我试过清理会话和许多其他事情无济于事。只有在更改ParentCategoryID时才会发生这种情况。更改Position后会立即显示。

这似乎相似但不确定:http://jira.nhibernate.org/browse/NH-1604

我是回复。转到同一页面(yuk)。它工作正常,但它不应该需要它。非常感谢您的回复。

1 个答案:

答案 0 :(得分:0)

它是否与应用程序中不同点使用的不同会话有关,我知道java hibernate选项有一个概念,即对后端servlet以及jsp前端内容使用相同的hibernate会话。