9

NHibernate の内外を学習できるように、サンプル アプリケーションを開発しています。削除の問題で苦労しています。親のコレクションから削除してから親を保存することで、子レコードを削除できるようにしたいと考えています。双方向の一対多の関係をセットアップしましたが、挿入/更新はうまく機能しています。

これが私のマッピングです

バスケット:

<bag name="Items" inverse="true" cascade="all"> <key column="BasketId" /> <one-to-many class="BasketItem" /> </bag>

バスケットアイテム:

<many-to-one not-null="true" name="Basket" column="BasketId" />

カートのアイテムを削除するように電話をかけたいと思いbasket.RemoveBasketItem(BasketItem item)ます。Session.SaveUpdate(basket)これは可能ですか?

4

4 に答える 4

18

に変更cascade="all"cascade="all-delete-orphan"ます。

cascade="all"親が削除された場合にのみ子レコードを削除します。

于 2009-06-12T10:44:59.373 に答える
2

同じシナリオがあり、bagList で cascade="all-delete-orphan" を使用しましたが、コレクション内の単一の子アイテムを削除すると、親オブジェクトも削除されます。

于 2010-01-08T06:18:22.260 に答える
0

私は子供の要素が Ordered 列挙型を返すという問題を抱えていました。

private readonly IList<Child> children;

public virtual IEnumerable<Child> Children { get { return children.OrderBy(c => c.Position); } }

public virtual void DeleteChild(Child item)
{
    children.Remove(item);
}

順序付けをマッピングに移動し、IEnumerable の場合と同じように子を返しました。これは私のために働いた!

于 2015-07-15T20:00:34.673 に答える
0

コレクションゲッターから新しいリストを ReadOnly として返すため、initforthemoney と同じ問題が発生していました。nosetterコレクションのプロパティ アクセス方法を からに変更することで、ReadOnly リストを引き続き使用できることがわかりましたfield

于 2012-01-31T01:25:46.377 に答える