こんにちは、次のシナリオで子オブジェクトの更新に問題があります。
マッピングは次のとおりです。
親: カレンダー
<bag name="defaultCategories" inverse="true" lazy="false"
cascade="all-delete-orphan">
<key column="parentID" />
<one-to-many class="DefaultCategory"/>
</bag>
子: DefaultCategory
<class name="DefaultCategory" table="tb_calendar_default_category" lazy="false">
<id name="id" column="id">
<generator class="hilo"/>
</id>
<many-to-one name="calendar" column="parentID" not-null="true"
cascade="all-delete-orphan" />
カレンダーの更新に使用されるコード:
public Calendar Update(Calendar vo)
{
session = NHibernateHelper.GetCurrentSession();
tx = session.BeginTransaction();
using (tx)
{
session.Update(vo);
tx.Commit();
}
return vo;
}
問題は、UI を介して defaultCategories を追加または削除し、更新されたバージョンのカレンダーをバックエンドに送り返すと、NHibernate が更新されたカレンダーを返し、すべてが正常に見えることです。ただし、削除されるべき defaultCatergories は、デフォルトの Categories テーブルに残されます。したがって、UI を更新してカレンダーを再度呼び出すと、コレクションが変更されていないことがわかります。
すべての defaultCatergories を parentID で削除してから再作成する必要があると思いますか? 私はNHibernateがあなたのためにこれを処理したという印象を受けましたか? どんな助けや指針も大歓迎です。