「カテゴリ」と呼ばれるオブジェクトがあり、テーブルは次のようになります。
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 は遅延読み込み時に更新を取得していません。
変更はコミットされ、フラッシュされ、データベースに表示されます。それらは Hibernate によって取得されません。
オブジェクトで Refresh() メソッドを試しましたが、うまくいきません。リフレッシュが必要なのはオブジェクトの子です。
セッションをクリアしようとしましたが、他の多くのことは役に立ちませんでした。これは、 を変更した場合にのみ発生しParentCategoryID
ます。が変更されると、Position
すぐに表示されます。
これは似ているようですが、よくわかりません: http://jira.nhibernate.org/browse/NH-1604
同じページ (yuk) に response.redirecting しています。正常に動作しますが、必要ないはずです。対応は大変有り難く存じます。