Frage

Suche nach einer Antwort auf, wie NHibernate konfiguriert mein Szenario zu unterstützen, eine many-to-many-Karte mit einer objektivierten Beziehung.

Ich habe eine colection von Person: s mit Beziehungen zu anderer Person: s. Jede der Beziehungen haben ein Attribut spezifiziert, welche Art von Beziehung sie haben. In einem RDB dies unter Verwendung einer viele-zu-viele-Tabelle mit dem Beziehungstyp in dieser Tabelle angegeben durchgeführt wird, kann dann Modell, indem mehrere Arten erweitert werden, z.B. "Close-Freund" und "Erzfeind".

Ich möchte entweder in der Lage sein eine Person Objekt abzufragen alle zugehörigen Personen nach Typ zurückzukehren

<IList>Person myEnemies =  myPerson.getRelatedPersons(relationType.Enemy)

oder

<IList>Person myFriends = myPerson.getRelatedPersons(relationType.Friend)

Eine andere (weniger dehnbar) Lösung zu statisch in der Klasse sein würde angeben, was andere Beziehungen bestehen:

public class Person   
{   
  public virtual int Id { get; private set; }   
  public virtual string FirstName { get; set; }   
  public virtual string LastName { get; set; }   
  public virtual IList<Person> Friends { get; set; }   
  public virtual IList<Person> Enemies { get; set; }   
}

Im Moment I haben eine Legacy-Datenbank verwenden mit einer „Person“ Tisch sowie eine „PersonPerson“ Tabelle. Die „PersonPerson“ Tabelle hält, die die Beziehung Typ als Integer.

Ich habe versucht, diese mit Syntax zu tun, wie unten ohne Erfolg dieses weit ...

// How to specify type=1  here?
HasManyToMany(x => x.Friends).WithTableName("Person_Person"); 

// How to specify type=2  here?
HasManyToMany(x => x.Enemies).WithTableName("Person_Person"); 

Alle Tipps / Lösung zur Zuordnung dieses mit (fließend) NHibernate?

BR

/ Jens

War es hilfreich?

Lösung

Das erste Beispiel sprechen Sie klingen wie Sie eine Vererbungs Mapping untersuchen müssen, aber ich bin nicht sicher, wie das mit dem zusätzlichen Tisch beteiligt arbeiten würde.

Das zweite Beispiel sollten Sie nur in der Lage sein, die Where-Klausel verwenden.

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top