Laden...

Nhibernate: m:1:n statt m:n -> Implementierung?

Erstellt von Warappa vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.392 Views
W
Warappa Themenstarter:in
59 Beiträge seit 2006
vor 13 Jahren
Nhibernate: m:1:n statt m:n -> Implementierung?

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:

  • Items sollen in Gruppen zusammen gefasst werden können
  • Die Items können ohne Gruppe exitieren
  • Die Gruppen können auch leer sein

Was ich mir wünschen würde:

  • IList Properties in den Entities wie z.B. "Groups" im Item-Entity oder "Items" im Group-Entity
  • Das Hinzufügen oder entfernen von Einträgen in diesen Listen sollte automatisch zum Anlegen/Löschen eines Assoziationseintrages in der DB führen (Tabelle "Item2Group";), doch das Löschen aus dieser Liste sollte nicht automatisch zum (DB-)Löschen der aus der Liste entfernten **_Items _**führen.
    Z.B.
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!

87 Beiträge seit 2006
vor 13 Jahren

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

The Humble Programmer by Edsger W. Dijkstra