1

Auf der Suche nach einer Antwort zur Konfiguration von NHibernate, um mein Szenario zu unterstützen, eine Viele-zu-viele-Karte mit einer objektivierten Beziehung.Fluent NHibernate vergegenständlich Beziehungszuordnung

Ich habe eine Sammlung von Person: s mit Beziehungen zu anderen Personen: s. Jede der Beziehungen hat ein Attribut, das angibt, welche Art von Beziehung sie haben. In einer RDB erfolgt dies unter Verwendung einer Viele-zu-Viele-Tabelle mit dem Beziehungstyp, der in dieser Tabelle spezifiziert ist, das Modell kann dann erweitert werden, indem mehr Typen zugelassen werden, z. "enger Freund" und "Erzfeind".

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

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

oder

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

Weitere (weniger dehnbar) Lösung in die statisch sein würde Klasse spezifizieren, welche anderen Relationen existieren:

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; } 
} 

Gerade jetzt ich müssen eine Legacy-Datenbank mit einer "Person" -Tabelle sowie einer "PersonPerson" -Tabelle verwenden. Die Tabelle "PersonPerson" enthält den Relationstyp als Ganzzahl.

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

// 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"); 

Irgendwelche Tipps/Lösung auf Zuordnung dieser mit (fließend) NHibernate?

BR

/Jens

Antwort

1

Das erste Beispiel, das Sie von Lauten sprechen wie Sie eine Vererbungs Mapping untersuchen müssen, aber ich bin mir nicht sicher, wie das, die mit der zusätzlichen Tabelle arbeiten würde.

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

HasManyToMany(x => x.Friends) 
    .WithTableName("Person_Person") 
    .Where("type = 2"); 
+0

Großartig! Ich denke, dass ich eine neue Klasse "RelatedPerson" hinzufügen muss, um den ersten Fall zu unterstützen. /J – JensJ