2011-05-09 3 views
0

Je travaille avec une structure nœud/lien, mais j'ai des problèmes de mappage avec nhibernate fluent.Mappage d'une relation many-to-two dans fluent-nhibernate

Ceci est une simplification des classes que j'utilise.


class Node 
{ 
    public virtual IList Links { get; set; } 
} 

class Link 
{ 
    public virtual Node StartNode { get; set; } 
    public virtual Node EndNode { get; set; } 
} 

Un nœud peut avoir de nombreux liens qui y sont connectés. Un lien doit être connecté à deux nœuds.

Et j'ai besoin de savoir quel noeud est le noeud de départ et le noeud final, donc ils doivent être spécifiques. C'est pourquoi je ne peux pas utiliser une liste et la limiter à deux nœuds.

Quelqu'un a-t-il rencontré ce problème et trouvé une solution?

Edit: Clearifying question
Je ne suis pas en utilisant AutoMapping, j'utilise les méthodes de cartographie explisit: Références, hasMany et HasManyToMany. Essentiellement en suivant les méthodes trouvées dans le tutoriel d'introduction: http://wiki.fluentnhibernate.org/Getting_started#Your_first_project

Je n'ai pas non plus de base de données, je vais créer le schéma de base de données à partir des mappings en utilisant nhibernate.

Ce que je demande est, comment puis-je créer une relation many-to-two?

+1

Alors, quelle est votre question exactement? Comment vous mapperiez Link, Node ou les deux? Faites-vous aussi de l'automapping ou y a-t-il des tables de base de données que vous utilisez (si oui, publiez les tables)? –

+0

J'ai mis à jour la question, j'espère qu'elle clearifies les choses :) –

Répondre

1

Eh bien il n'y a pas beaucoup à deux rapports spéciaux, mais ce que vous auriez probablement faire est quelque chose comme ceci:

public class NodeMap : ClassMap<Node> 
{ 
    public NodeMap() 
    { 
     //Id and any other fields mapped in node 

     HasMany(x => x.Links); 
    } 
} 

public class LinkMap : ClassMap<Link> 
{ 
    public LinkMap() 
    { 
     //Id and any other fields mapped in node 

     References(x => x.StartNode); 
     References(x => x.EndNode); 
    } 
} 

Encore une fois c'est juste un bref aperçu ci-dessus. Vous aurez probablement besoin d'attributs de mappage supplémentaires si vous souhaitez par exemple mettre en cascade toutes les actions de création/mise à jour/suppression.

Questions connexes