2010-11-26 8 views
3

Avec cette classe et la cartographie:Nhibernate Courant: beaucoup autoréférentiel à beaucoup

Public class Something 
{ 
    public int Id; 
    public IList<Something> Similarthings { get; set; } 
} 

public class SomtehingMapping 
    { 
     public SomtehingMapping() 
     { 
      Map(x => x.Id); 
      HasManyToMany(x => x.Similarthings) 
       .Table("SomethingsToSimilarthings") 
       .ParentKeyColumn("SomethingA_Id") 
       .ChildKeyColumn("SomethingB_Id") 
       .Cascade.All(); 
     } 
} 

Vous vous retrouvez avec ceci:

Table SomethingsToSimilarthings 
------------------------------- 
SomethingA_Id SomethingB_Id 
111    222 
222    111 

Est-il possible de définir ce mapping afin que le bi-directionnel relation est exprimée en utilisant une seule ligne de base de données?

+0

Avez-vous résoudre ce problème? – alexn

Répondre

1

Avez-vous essayé d'installer l'attribut inverse mapping à vrai comme ça?

public class SomtehingMapping 
    { 
     public SomtehingMapping() 
     { 
      Map(x => x.Id); 
      HasManyToMany(x => x.Similarthings) 
       .Inverse() 
       .Table("SomethingsToSimilarthings") 
       .ParentKeyColumn("SomethingA_Id") 
       .ChildKeyColumn("SomethingB_Id") 
       .Cascade.All(); 
     } 
} 

Une alternative serait de définir explicitement l'autre côté de l'association et marquer que inverse="true"

+0

Je n'ai pas essayé. Difficile d'imaginer ce que Inverse = true signifierait dans ce contexte. Je vais essayer et revenir. – UpTheCreek

Questions connexes