Ich habe das folgende Schema, und wenn ich eines der Objekte auf einer der vielen Seite lösche, scheint es zu versuchen, die Objekte auf der anderen Seite zu löschen. Bin ein wenig verwirrt über die richtigen Cascade-Optionen zu verwenden, und ich finde nicht Oren kurze Beschreibung von ihnen, um nützlich zu sein, also bitte nicht diese zurück zitieren.Fließend NHibernate mit ManyToMany und benutzerdefinierte Verknüpfungstabelle
public class Store {
public virtual IList<StoreProduct> StoreProducts { get; set; }
}
public class Product {
public virtual IList<StoreProduct> StoreProducts { get; set; }
}
public class StoreProduct {
public virtual Store Store { get; set; }
public virtual Product Product { get; set; }
public virtual Decimal Cost { get; set; } //this is why I have a custom linking class
}
In meiner Mapping Überschreibung, die ich habe:
Für Store:
mapping.HasMany(x => x.StoreProducts).Cascade.AllDeleteOrphan().Inverse;
für Produkt:
mapping.HasMany(x => x.StoreProducts).Cascade.AllDeleteOrphan().Inverse;
Wenn ich versuche, einen Laden zu löschen, die StoreProducts zugeordnet ist, Es scheint, dass NHIbernate versucht, nicht nur die StoreProducts, sondern auch die Produkte zu löschen.
Hier sind meine Konventionen:
return c =>
{
c.Add<ForeignKeyConvention>();
c.Add<HasManyConvention>();
c.Add<HasManyToManyConvention>();
c.Add<ManyToManyTableNameConvention>();
c.Add<PrimaryKeyConvention>();
c.Add<ReferenceConvention>();
c.Add<EnumConvention>();
c.Add<TableNameConvention>();
c.Add<CascadeAll>();
c.Add(DefaultCascade.All());
};
HasManyConvention:
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.EntityType.Name + "Fk");
instance.Cascade.AllDeleteOrphan();
instance.Inverse();
}
Was mache ich falsch?
Danke!
ps. .: Ich möchte nicht Menschen mit Code zu überwältigen, kann aber mehr posten, wenn nötig.