2012-11-05 3 views
1

je la situation suivante dans une base de données existante [exemple]cartographie NHibernate multiple clé composite thowing System.IndexOutOfRangeException

table1 
**ID_TABLE1 [PK] 
ID_SOURCE** [PK] 


table2 
**ID_TABLE2 [PK] 
ID_SOURCE** [PK] 


table3 
**ID_TABLE3 [PK] 
ID_SOURCE** [PK][FK] 
ID_TABLE2 [FK] 
ID_TABLE1 [FK] 



public partial classTable3Map : ClassMap<TABLE3> 
    { 
     public classTable3Map() 
     { 
      Table("TABLE3"); 
      LazyLoad(); 
      CompositeId().KeyProperty(x => x.ID_TABLE3 , "ID_TABLE3").KeyProperty(x => x.ID_SOURCE, "ID_SOURCE"); 
      References(x => x.TABLE1).Columns("ID_TABLE1 ", "ID_SOURCE"); 
      References(x => x.TABLE2).Columns("ID_TABLE2 ", "ID_SOURCE"); 
     } 
    } 

Lorsque je tente de sauvegarder ce type d'objets jeter un NHibernate

**System.IndexOutOfRangeException**  
    Message=Index xx non valid for xxxParameterCollection 

Je verrai qu'il a plus d'entrée que de paramètre (les colonnes ID_SOURCE dupliquées)

Lorsque j'essaie de mapper une relation m est la même situation.

Je peux enregistrer si je mappe l'ID au lieu d'objets (référence) et enregistrer les enfants avant l'insertion, mais je dois réécrire le modèle et faire beaucoup d'ajustements manuels.

+0

Pouvez-vous ajouter quelque chose de plus de la stacktrace ? –

Répondre

0

Malheureusement, il n'est pas possible de spécifier une colonne comme partie de la clé primaire et de la clé étrangère see here for similar question.

options que je vois:

  • font les références .Readonly()
  • essayer de mettre en œuvre ICompositeUserType pour les références, mais vous perdrez désireux de chargement et l'interrogation
Questions connexes