NHibernate経由でコレクションを取得するときに.RemoveAll
を使用できないという問題があります。NHibernate:コレクションの.RemoveAllを呼び出す
NHibernate経由で保持するOrder
というエンティティがあります。
Order
は、多くがOrderItems
です。ここでは、この関係のための私のマッピングは次のとおりです。
mapping.HasMany(o => o.Items)
.Cascade.AllDeleteOrphan()
.AsList()
.Inverse();
:私はそれを理解したよう
public virtual IList<OrderItem> Items { get; set; }
、私はNHibernateのは、リストのそれ自身の実装を持っているのでIList
を使用する必要があります。
は今、私は私のOrder
クラスの上でこのメソッドを使用して、私のOrder
から項目を削除する:
public virtual void RemoveItem(string variantSku)
{
items.RemoveAll(x => x.Variant.VariantSku == variantSku);
}
それは動作しません、IList
はこのメソッドを持っていないため。
私が試した:
items.ToList().RemoveAll(x => x.Variant.VariantSku == variantSku);
をしかし、それは動作するようには思えません。私はitems.ToList()
は実際に元のリストのコピーを作成し、実現するので、私は、私は試すことができると思います:
var itemsList = items.ToList();
itemsList.RemoveAll(...)
しかし、それはまだNHibernateはを経て持続しますか?
私の質問:この文脈で実際に.RemoveAll
を使用することはできますか、アイテムを削除する別の方法について検討する必要がありますか?
マッピングに.Cascade.AllDeleteOrphan()がある場合は、item.Order = nullが必要かどうかわかりません。 AllDeleteOrphan()はそうではありませんか?残りは、しかし、スポットです。アイテムをforeach'ingして削除しようとしている児童の間違いをしていた。 – autonomatt
item.Order = nullは孤児にするものです。そうでない場合、セッションがフラッシュされたときに再保存されます。 –
実際にあなたのコードは動作しません。それでも、「コレクションは変更されました。列挙操作が実行されない可能性があります。 "私はforループを使用して終了しました。 – autonomatt