Ich verwende: MSSQL2005, NHibernate, FluentNHibernate mit AutoMapping (Conventions, Overrides,...)
Hi,
Mein Background:
ich habe früher direkt mit Sql-Abfragen gearbeitet und mir dann mein eigenes "ORM" geschrieben, das sich aber mit der Zeit als leider unzureichend herausstellte. Deswegen möchte ich ein richtiges ORM einsetzen und bin bei NHibernate gelandet.
Ich bin momentan dabei mich in NHibernate einzuarbeiten und stecke irgendwie bei n:m also Many-to-many Relations fest.
Folgendes möchte ich erreichen:
Was ich mir wünschen würde:
groupIt.Items.Remove(it);
soll das item in der DB belassen, aber den Eintrag in der Assoziationstabelle löschen.
Mein Problem:
Ich hab ein bisschen hin-und-her probiert mit Many-To-Many, Cascade All/SaveUpdate/... aber entweder es kam zu einer**_ Foreignkey-Verletzung_** beim Löschen der Gruppe **oder **es wurden mit den Assoziationseinträgen auch die Items gelöscht...
Jach30Lena hat gepostet, dass n:m Beziehungen in NHibernate bei ihm schon oft zu Problemen geführt haben und er es über n:1:m gelöst hat. Jetzt ist mir nicht klar, wie ich das in meinen Entities (oder Repositories?) implementieren soll.
Meine Frage:
Brauch ich in meiner Entity (oder im Repository?) eine Funktion wie "AddItemToGroup" und "RemoveItemFromGroup" oder geht das auch wie oben beschrieben über die IList Funktionen "Add"/"Remove"?
Danke schon mal im Voraus für eure Hilfe.
Lg
warappa
Praxis schlägt immer die Theorie!
Hallo,
Eine Gruppe - Item Beziehung ist aber zwangsweise keine m:n Beziehung.
Das wird erst eine m:n wenn items auch in mehreren Gruppen sein können sollen.?
Wenn es denn unbedingt m:n sein muss funzt das bei mir ganz supi.
public GroupMap()
{
...
this.HasManyToMany(x => x.Items);
}
public ItemMap()
{
...
this.HasManyToMany(x => x.Groups);
}
EDIT:
Eine m:1:n Beziehung, da is doch nur wichtig was "1" ist.
Das Könnte zB sowas sein:
public class GroupItemConnector
{
public ISet<Group> Groups { ... }
public ISet<Item> Items { ... }
}
PS: Vorsichtig mit IList und ISet usw. meist wird egl nur eine ISet gebraucht. Es sei denn ein Item soll mehr fach in der selben Group sein.
MfG
Tilton
"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger W. Dijkstra