XXP

mai 2016

lun. mar. mer. jeu. ven. sam. dim.
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

« Castle ActiveRecord et les objets "transients" | Accueil | Castle ActiveRecord et les objets "transients" »

19 septembre 2007

Castle ActiveRecord et les objets "transients"

Pour ceux qui connaissent le projet open-source .Net Castle, ActiveRecord va faire pour sa prochaine version une amélioration intéressante concernant la gestion des objets "transients".

Pour rappel, Castle comprend plusieurs projets, dont :
•    un container IoC (Inversion of Control) , MicroKernel
•    un container plus élaboré qui repose sur le précédent et y ajoute des fonctions de configuration et d'interception
•    un framework MVC pour le Web, MonoRail (qui n'a rien à voir avec Mono)
•    un framework de programmation orienté aspect, Aspect#
•    un framework de persistance, ActiveRecord.

Castle ActiveRecord est une surcouche à NHibernate dont la particularité est de permettre la description du mapping entre classes et database et entre classes directement dans le code sous forme d'attributs.

Une des limitations d'ActiveRecord était de ne pas exposer de moyen de faire des Update sur des objets détachés de la session NHibernate courante, c.-à-d. sur des objets créés hors contexte NHibernate et doté d'un clé primaire valide.

Or ce scenario est commun quand on utilise la classe ObjectDataSource pour le databinding de l'UI : en cas d'update lors d'un postback, le framework .Net crée "dans notre dos", par reflection, une instance de la classe de la source de données, lui assigne toutes ses propriétés (éventuellement modifiées par l'utilisateur via l'UI) et la passe en paramètre de la fonction d'update spécifiée dans la déclaration de l'ObjectDataSource.

On se retrouve donc face à la session nhibernate avec un objet inconnu de la session, peut-être même copie d'un objet présent en session. Appeler Update() sur cet objet lance une exception. NHibernate sait gérer ce cas grâce à la méthode SaveOrUpdateCopy de l'interface ISession (remplacé par merge en v3), pas ActiveRecord qui ne donnait pas d'accès à cette méthode.

Et bien dans la prochaine release de Castle ActiveRecord, l'équivalent fonctionnel de SaveOrUpdateCopy est disponible via la méthode SaveCopy de ActiveRecordBase. Pour l'instant disponible seulement depuis le repository Subversion de castle ou depuis leur serveur de build.

[ActiveRecord or not ActiveRecord ? This is another question…]

TrackBack

URL TrackBack de cette note:
https://www.typepad.com/services/trackback/6a00d8341c871f53ef00e54ee1601a8833

Listed below are links to weblogs that reference Castle ActiveRecord et les objets "transients":

Commentaires

L'utilisation des commentaires est désactivée pour cette note.