Le problème rencontré était l'utilisation d'un identifiant unique pour la création de données dans une table. Comme vous le savez peut etre déja, Oracle n'a pas de type "AUTO-INCREMENT"/"IDENTITE" comme Mysql ou SqlServeur. Pour pallier a cette contrainte il "suffit" de créer une SEQUENCE et d'utiliser cette derniere pour prendre de maniere unique l'identifiant de notre table.
Le but de ce billet n'etant pas d'expliquer les Sequence, je vous laisse la lecture de ce site pour la compréhension : http://www.commentcamarche.net/contents/oracle/oracseq.php3
Revenons a nos mouton : NHibernate est-il capable de gérer nativement les identifiants uniques ? C'est effectivement le cas ! Chouette ! Comment vous allez me dire ? C'est pas très compliqué, il suffit de modifier votre fichier de mapping comme ceci :
SEQ_CATEGORIES
Ci dessous le code de test de la création d'une catégorie
[TestMethod] [DeploymentItem("hibernate.cfg.xml")] public void CanCreateCategory() { IRepositoryrepo = new CategoryRepository(); Category cat = new Category(); cat.Name = "ASP.NET"; repo.Save(cat); };
L'avantage c'est que en Oracle, NHibernate utilisera la séquence SEQ_CATEGORIES pour alimenter la table en question
SELECT SEQ_CATEGORIES.NEXTVAL FROM DUAL
Alors que si vous utiliser SQL Serveur, le parametre sera ignoré et le champs "Auto/Identité" sera utilisé.
Cependant il me reste une question avec cette méthode, c'est une fois que l'on a "sauver" notre objet categorie en BDD ... est-ce possible d'obtenir cet identifiant généré ? pour faire d'autre traitement avec ?
Console.WriteLine(" Avons nous l'objet avec l'id ?: " + cat.Id);Bon codage !
Aucun commentaire:
Enregistrer un commentaire