Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/11/2011, 22h34   #1
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
Par défaut [NHibernate] Génération de l'identifiant d'une table dont la valeur est stockée dans une table de référence

Bonsoir,

l'identifiant d'une table est une chaîne de caractères préfixés par 2 lettres suivi d'un nombre incrémenté de 1 à chaque nouvel enregistrement.
Ce nombre est stocké dans une table de référence.

Ainsi, lors de la création d'un nouvel enregistrement, il faut pour générer l'identifiant:
- lire le compteur sauvegardé dans la table de référence,
- incrémenter de 1,
- préfixer ce nombre par 2 lettres,
- enregistrer le nouvel enregistrement,
- sauvegarder la nouvelle valeur du compteur dans la table de référence

Est-il possible que NHibernate génère l'identifiant du nouvel enregistrement lors de l'ajout dans la base de données en réalisant les actions décrites ci-dessus ?

Merci d'avance,
Zoax
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 23h20   #2
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 838
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 838
Points : 34 228
Points : 34 228
C'est possible, mais pas très simple... il faut que tu implémentes un générateur d'identité, c'est à dire une classe qui implémente IIdentifierGenerator. Tu trouveras (un peu) plus de détails ici... la doc de NHibernate est malheureusement presque inexistante

Mais cette approche n'est pas très recommandée... en tous cas Ayende Rahien dit qu'il vaut mieux l'éviter, et vu que c'est certainement un des plus grands experts de NHibernate, j'aurais tendance à le croire

Si tu peux, il vaudrait mieux modifier un peu la structure de la base : crée une nouvelle clé primaire numérique, et change ta clé primaire actuelle pour que ce ne soit plus une clé primaire mais une simple colonne avec une contrainte d'unicité
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Extraction de données de pages web à l'aide de HTML Agility Pack
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 23h29   #3
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
Bonsoir Tomlev,

merci une fois de plus pour la réponse.

Citation:
Envoyé par tomlev
Si tu peux, il vaudrait mieux modifier un peu la structure de la base : crée une nouvelle clé primaire numérique, et change ta clé primaire actuelle pour que ce ne soit plus une clé primaire mais une simple colonne avec une contrainte d'unicité
Et non malheureusement je ne peux pas modifier la structure de la base.

Penses-tu que je devrais gérer l'incrémentation dans la couche métier en incluant toutes les étapes au sein d'une transaction ?

Merci d'avance,
Zoax
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 00h30   #4
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 838
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 838
Points : 34 228
Points : 34 228
Citation:
Envoyé par zoaax Voir le message
Penses-tu que je devrais gérer l'incrémentation dans la couche métier en incluant toutes les étapes au sein d'une transaction ?
A vrai dire je ne sais pas trop... mais il me semble que ce genre de chose n'a rien à faire dans la couche métier, vu que c'est lié à l'accès aux données
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Extraction de données de pages web à l'aide de HTML Agility Pack
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 14h28   #5
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 525
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 525
Points : 2 779
Points : 2 779
Envoyer un message via MSN à iberserk
Posez un TRIGGER INSTEAD OF INSERT sur votre table qui gérera celà proprement.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 14h47   #6
zoaax
Membre confirmé
 
Inscription : avril 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 346
Points : 200
Points : 200
Bonjour,

merci pour la réponse.
En réalité, je ne peux malheureusement apporter aucune modification à la base.
C'est dommage. Faut que je fasse avec.

Merci
Zoax
zoaax est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web