私は多対多の関係を持っています:多対多の関係で削除するにはどうすればいいですか?
製品には多くのカテゴリがあり、カテゴリには多くの製品があります。
は、私は今、私はShopping Category
を削除
Shopping Category
Food Category
Product A - Shopping Category, Food Category
Product B - Shopping Category
を持っていると言います。 Product A
の参照をShopping Category
から削除して、Product B
を完全に削除したいとします。
私はで終わるだろう:私はNHibernateの中でこれを行うにはどうすればよい(私は流暢NHibernateはを使用しています)
Product A - Food Category.
。
私はCascade DeleteOrphan
とAllDeleteOrphan
を使用しようとしましたが、私がそれを行い、ショッピングを削除すると、製品AとBの両方が削除されます。
public class CategoryMapping : ClassMap<Category>
{
public CategoryMapping()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
HasManyToMany(x => x.Products).Cascade.DeleteOrphan();
}
}
public class ProductMapping : ClassMap<Product>
{
public ProductMapping()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
HasManyToMany(x => x.Categories);
}
}
unitOfWork.BeginTransaction();
Category category =session.Load<Category>(id);
session.Delete(category);
unitOfWork.Commit();
わかりません。私はsaveUpdateがそれを再保存すると思っていました。あなたがコレクションからエンティティを削除することによって何を意味するのか分かりません。私はカテゴリーを削除するときに削除する参照を必要とする1000の製品を持つことができたので、このカスケードは私自身がそれを行う必要があります。 – chobo2
私はあなたの質問を誤解しているかもしれませんが、私は間違いなく 'DeleteOrphan'と' AllDeleteOrphan'がなぜこの製品Aを削除するのか分かります。 'SaveUpdate'はアソシエーション(多くのテーブルエントリ...' product_category')だけを削除しますが、 'Product A'は削除しません。これは、このカスケード設定を使用するときに手動で処理する必要があるものです。私はこれを扱うカスケードはないと思う(間違っているかもしれない)。 –
うーん、私はそれを試さなければならないだろうが、私はDeleteOrphanがこのような状況のためだと思った。私はそれがまだ何かと関係しているので、製品Aは孤児ではありません。 – chobo2