C'est ce que je vais essayer de décrire dans les étapes suivantes.
Lors de l'execution et du mapping de NHibernate, logiquement (sans mettre de clé primaire dans votre fichier xml), vous devriez tomber sur ce message :
- “composite-id class must override Equals()”
- “composite-id class must override GetHashCode()”
Pour corriger cette erreur, il faut absoluement avoir une clé primaire. Dans notre cas, elle sera composée (de Contrat_ID et Code_Agn).
Voici notre mapping:
Notre classe :
public class Allegement { public virtual string Contrat_ID { get; set;} public virtual string Lot_Paie { get; set;} public virtual string Montant_ALLGT_1 { get; set;} public virtual string Code_Agn { get; set; } // nécessaire lors des clés composites public override bool Equals(object obj) { if (obj == null) return false; Allegement a = obj as Allegement; if (a == null) return false; if (this.Contrat_ID == a.Contrat_ID && this.Code_Agn == a.Code_Agn) return true; else return false; } // necessaire lors des clés composites public override int GetHashCode() { int hash = 666; // ce que l'on veux hash += (null == this.Contrat_ID ? 0 : this.Contrat_ID.GetHashCode()); hash += (null == this.Code_Agn ? 0 : this.Code_Agn.GetHashCode()); return hash; } }}
Les élements a retenir de cet exemple sont :
- pas de mapping sans clé primaire
- la redefinition des méthodes "Equals" et "GetHashCode", des classes de bases
Pour plus d'information sur le mapping : http://nhforge.org/doc/nh/en/index.html dans la partie "5. Basic O/R Mapping"
Aucun commentaire:
Enregistrer un commentaire