1

Vous cherchez une réponse sur la façon de configurer NHibernate pour supporter mon scénario, une carte plusieurs-à-plusieurs avec une relation objectivée.Mappage de relations objectivé NHibernate

J'ai une collection de Person: s avec des relations avec d'autres Person: s. Chacune des relations a un attribut spécifiant le type de relation qu'elles ont. Dans un RDB, ceci est fait en utilisant une table many-to-many avec le type de relation spécifié dans cette table, le modèle peut ensuite être étendu en autorisant plus de types, par ex. "ami proche" et "ennemi juré".

Je voudrais pouvoir soit d'interroger un objet Personne à retourner toutes les personnes liées par type

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

ou

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

Une autre solution (moins extensible) serait statiquement dans la class spécifier quelles autres relations existent:

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

Actuellement doivent utiliser une base de données existante avec une table "Person" ainsi qu'une table "PersonPerson". La table "PersonPerson" contient le type de relation sous la forme d'un entier.

J'ai essayer de le faire en utilisant la syntaxe comme ci-dessous, sans succès jusqu'ici ...

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

des conseils/solution sur la cartographie avec ce (courant) NHibernate?

BR

/Jens

Répondre

1

Le premier exemple, vous parlez des sons comme vous avez besoin d'enquêter sur une cartographie de l'héritage, mais je ne sais pas comment cela travaillerait avec la table supplémentaire impliqué.

Le deuxième exemple vous devriez juste pouvoir utiliser la clause Where.

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

Très bien! Je suppose que je dois inclure une nouvelle classe, "RelatedPerson", pour soutenir le premier cas. /J – JensJ

Questions connexes