Domanda

Alla ricerca di una risposta su come configurare NHibernate per supportare il mio scenario, una mappa molti-a-molti con una relazione oggettivata.

Ho una collezione di Person: s con relazioni con l'altro Person: s. Ciascuna delle relazioni ha un attributo che specifica il tipo di relazione che hanno. In un RDB questo viene fatto usando una tabella molti-a-molti con il tipo di relazione specificato in quella tabella, il modello può quindi essere esteso consentendo più tipi, & Quot; close-amico " e " arch-nemico " ;.

Vorrei poter interrogare un oggetto Person per restituire tutte le Persone correlate per tipo

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

o

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

Un'altra soluzione (meno estensibile) sarebbe quella di specificare staticamente nella classe quali altre relazioni esistono:

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

In questo momento devo utilizzare un database legacy con una persona " Persona " tabella e un "PersonPerson" tavolo. Il "PersonPerson" tabella contiene il tipo di relazione come intero.

Sto provando a farlo usando la sintassi come sotto senza successo finora ...

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

Qualche suggerimento / soluzione su come mapparlo con NHibernate (fluido)?

BR

/ Jens

È stato utile?

Soluzione

Il primo esempio di cui parli suona come se avessi bisogno di investigare una mappatura dell'ereditarietà, ma non sono sicuro di come funzionerebbe con la tabella aggiuntiva in questione.

Nel secondo esempio dovresti essere in grado di usare solo la clausola Where.

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top