Ich habe eine viele-zu-eins-Beziehung zwischen den Objekten Product
und Supplier
. Ich muss in der Lage sein, Supplier
zu löschen, ohne die Product
s zu löschen, die zu ihm gehören.NHibernate viele-zu-eins-Beziehung löschen nur übergeordnete
Hier ist eine vereinfachte Version von Klassen ist:
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; }
}
ich FluentNHibernate bin mit, aber hier sind die Zuordnungen es produziert:
<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" />
einen Fremdschlüssel auf die Tabelle Artikel Dies schafft, Wenn ich also versuche, einen Lieferanten direkt zu löschen, erhalte ich einen Fremdschlüssel-Constraint-Fehler. Ich habe versucht, die Kaskade auf "alle" zu ändern, in der Hoffnung, dass dadurch möglicherweise nur die Beziehung gelöscht wird, aber alle Produkte und ihre anderen zugehörigen Objekte gelöscht wurden.
Der einzige Weg, den ich sehen kann, um dies jetzt zu lösen, besteht darin, die Sammlung Produkte des Lieferanten zu iterieren und die Eigenschaft Lieferant auf null zu setzen. Gibt es eine Möglichkeit, dieses Verhalten durch das Mapping zu erreichen?
Der DB wird automatisch generiert, also nein. – roryf
Außerdem hätte ich Phantom SupplierID Werte ohne Beziehung – roryf