24janv. 2012

NHibernate : mapper une clé primaire composite avec les NHibernate attributes

Une clé primaire composite est une clé composée de plusieurs colonnes. Voici comment mapper une clé composite avec les NHibernate Attribute.

Représenter la clé composite sous forme objet

La clé primaire composite doit être mappé sur un objet représentatif d'elle même.

Par exemple si vous utilisez des colonnes de type varchar et int au niveau de la base de données, il faudra créer une classe contenant des propriétés du même type .Net.

Par soucis de clarté, je suffixe les classes utilisées pour mapper les clés composites de Key.

public class MyCompositeKey
{
    /// <summary>
    /// The dnb reporting month
    /// </summary>
    public string KeyFieldName
    {
        get;
        set;
    }
    /// <summary>
    /// The cedant name
    /// </summary>
    public int KeyFieldCode
    {
        get;
        set;
    }
}

Déclarer le mapping dans l'objet métier

Comme pour les collections, il s'agit de représenter le XML utilisé dans les mapping NHibernate sous forme d'attributs.

Dans l'objet métier qui a pour clé primaire la clé composite, ajouter une propriété déclarée comme suis:

[CompositeId(Class = 
    "Model.Objects.MyCompositeKey ,Model")]
[KeyProperty(1, Name = "KeyFieldName", 
    Column = "keyFieldName")]
[KeyProperty(1, Name = "KeyFieldCode", 
    Column = "keyFieldCode")]
public virtual MyCompositeKey Id
{
    get;
    set;
}

L'élément important ici est l'utilisation des index au niveau des attributs.

Si j'avais mappé une clé composite en XML, j'aurais placé les balise KeyProperty à l'intérieur de la balise CompositeId.

C'est pourquoi il faut placer l'index des KeyProperty sur 1 pour refléter la hiérarchie : CompositeId contient les balises KeyProperty.

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.