Question

Nouveau sur NHibernate (mon avertissement). Je suis tombé sur un article similaire et intéressant sur MVC , cependant, je Suis plus curieux de savoir quelles sont les meilleures pratiques générales pour la gestion des sessions NHibernate au sein d’une application Web générique.

J'ai rencontré le projet Burrow , mais je commence à le faire. se rendre compte qu'il semble y avoir quelques directions différentes à prendre. Je suis conscient du fait que ce n'est probablement pas dans mon intérêt de de créer une nouvelle SessionFactory chaque fois que j'en ai besoin. toucher à la base de données, alors je suis intéressé par ce que la communauté fait pour gérer les sessions. Utilisez-vous Burrow? Enveloppez-vous votre SessionFactory dans un singleton?

Toute orientation ou idée est toujours grandement appréciée.

Était-ce utile?

La solution

Pour répondre directement à votre question, votre objet ISessionFactory doit être un singleton. Vous pouvez le faire par programme (en l’emballant dans un singleton C #) ou en le configurant dans votre conteneur IoC.

En ce qui concerne les sessions, Burrow a bonne mine, mais le modèle le plus simple et le plus simple pour les sessions dans les applications Web - OpenSessionInView - est proposé immédiatement avec NHibernate 2.0.0. En d'autres termes, votre code d'accès aux données appelle ISessionFactory.GetCurrentSession () plutôt que ISessionFactory.OpenSession () . Vous indiquez ensuite comment la session en cours de la fabrique est gérée en spécifiant une implémentation de ICurrentSessionContext . NHibernate fournit deux solutions prêtes à l’emploi permettant d’aligner la session à la demande Web. Ceci est appelé "Sessions contextuelles" dans la documentation.

Il ne fait aucun doute qu'une application Web plus complexe peut nécessiter des conversations plus longues avec un chargement paresseux complexe, etc., mais pour une application Web standard, des sessions contextuelles de NHibernate devraient suffire.

Autres conseils

J'ai écrit une série de billets de blog sur ce sujet concernant les modèles NHibernate / Fluent NHibernate Data Access.

La première chose que je recommande est l’abstraction de l’interaction de NHibernate.

Création d'un Dépôt NHiberate générique et extensible commun

Ensuite, pour gérer la gestion des sessions, j'ai mis en œuvre la "conversation par conversation professionnelle". Modèle qui, au lieu d'avoir une session NH, existe pour la vie d'une requête de page unique. Il existe pour une série d'événements. Par exemple, une page vous permet d'apporter de nombreuses modifications à un formulaire, puis à la fin. appliquez-les tous définitivement ou annulez-les.

Conversation Per Opération commerciale utilisant PostSharp et IoC

Si je devais écrire ce billet aujourd'hui, je n'utiliserais plus PostSharp pour gérer le code AOP (Aspect Orientated Programming) de mon projet. J'utiliserais Linfu.AOP ou un autre cadre pour l’interaction AOP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top