13

免責事項:私はNHibernate初心者なので、この質問が理にかなっていることを願っています。2 つのクラスの間に次のような多対多の関係があります…</p>

public class Entity1
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity2> Entity2List;
} 

Public class Entity2
{
    public virtual Guid EntityId { get; set; }
    public virtual IList<Entity1> Entity1List;
}

両方のクラス マッピングでバッグを使用して多対多の関係を追加し、関連テーブルを定義しましたが、どのカスケード オプションを使用すればよいかわかりません。新しい Entity1 インスタンスを作成し、新しい Entity2 インスタンスをそのリストに追加し、Save を呼び出し、両方をデータベースに挿入できるようにしたい (逆も同様)。エンティティを削除するときは、子エンティティへの関連付けを削除する必要がありますが、子エンティティ自体は削除しないでください。cascade="save-update" を使用する必要がありますか?

4

1 に答える 1

28

はい。この場合、「save-update」が必要なようです。

ドキュメンテーションで各カスケード オプションの優れた説明を見つけることはできませんでしたが、Ayende によるこのブログ投稿を参照として使用しました。

  • none - カスケードを行わず、ユーザーが自分で処理できるようにします。
  • save-update - オブジェクトが保存/更新されるときに、関連付けを確認し、それを必要とするオブジェクトを保存/更新します (多対多シナリオでの関連付けの保存/更新を含む)。
  • 削除- オブジェクトが削除されると、関連付け内のすべてのオブジェクトが削除されます。
  • delete-orphan - オブジェクトが削除されると、関連付け内のすべてのオブジェクトが削除されます。それに加えて、オブジェクトが関連付けから削除され、別のオブジェクトに関連付けられていない (孤立している) 場合は、そのオブジェクトも削除します。
  • all - オブジェクトが保存/更新/削除されている場合、関連付けをチェックし、見つかったすべてのオブジェクトを保存/更新/削除します。
  • all-delete-orphan - オブジェクトが保存/更新/削除されている場合、関連付けをチェックし、見つかったすべてのオブジェクトを保存/更新/削除します。それに加えて、オブジェクトが関連付けから削除され、別のオブジェクトに関連付けられていない (孤立している) 場合は、そのオブジェクトも削除します。
于 2009-07-20T08:13:43.853 に答える