0

ListsとListItemsの間には多対多の関連付けがあります。リストはそのアイテムを認識していますが、ListItemは含まれているリストを認識していません。カスケードはsaveupdateです。

したがって、ListItemエンティティを削除しようとすると、参照整合性が失われているというSQLExceptionが発生します。NHibernateは、リンクテーブルの対応する行を削除せずにListItemを削除しようとします。問題は、参照整合性を壊さずにListItemを削除するようにNHibernateに指示することは可能ですか?

含まれているすべてのリストからアイテムを手動で削除する必要がある場合、どうすれば適切に削除できますか?

アドバイスありがとうございます。

ulu

4

1 に答える 1

0

子のマッピングをに設定する必要がありますinverse=true別のスレッドから:

SaveOrUpdateを呼び出すと、NHibernateは最初にすべての子オブジェクトを削除します。次に、どちらの関係も逆としてマークされていないため、NHibernateは子テーブルの外部キー列もnullに設定しようとします。行はすでに削除されているため、2番目のエラーが発生します。これを修正するには、関係の片側でinverse=trueを設定する必要があります。これは通常、一方(主キーまたは親)側で行われます。これを行わない場合、NHibernateは関係の両側に適切な更新を行います。

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Staff)
      .Inverse()         // Magic code!
      .Cascade.All();
  }
}
于 2010-09-18T20:32:22.360 に答える