オブジェクトProduct
とSupplier
の間には多対1の関係があります。私はそれに属するProduct
を削除せずにSupplier
を削除する必要があります。ここで親を削除するNHibernateの多対1リレーションシップ
は、クラスの簡易版である:
public class Supplier {
public virtual IList<Product> Products { get; protected set; }
}
public class Product {
// Product belongs to a Category but Supplier is optional
public virtual Supplier Supplier { get; set; }
public virtual Category Category { get; set; }
}
私はFluentNHibernateを使用していますが、ここではそれが生成するマッピングです:
<bag name="Products" cascade="save-update" inverse="true">
<key column="SupplierID" />
<one-to-many class="Me.Product, Me, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Supplier" column="SupplierID" />
これは、Productsテーブルの外部キーを作成し、私がサプライヤでストレート削除をしようとすると、私は外部キー制約エラーを取得します。私はカスケードを「すべて」に変更しようとしましたが、関係を削除するだけで、すべてのプロダクトと他の関連オブジェクトが削除されることを願っていました。
この問題を解決するには、サプライヤのProductsコレクションを繰り返し、サプライヤプロパティをnullに設定するしかありません。マッピングを通じてこの動作を達成できる方法はありますか?
DBは自動的に生成されます。 – roryf
さらに、ファントムサプライヤIDの値には関係がありません – roryf