J'ai construit une application avec Fluent nHibernate/ASP.NET MVC - et j'ai creusé et j'ai compris que c'était la pratique la plus appropriée pour garder un ' permanent 'SessionFactory ouvert, puis utiliser des sessions pour chaque demande à la base de données. Bon, ça sonne bien ...La SessionFactory 'permanente', ASP.NET MVC et nHibernate
Je suis assez confus sur la façon d'accomplir cela, cependant. Tout ce que je trouve suppose un cadre structuré complet qui utilise une sorte de système de conteneurs IoC ... et c'est trop avancé pour ce que j'ai jusqu'ici. Existe-t-il des exemples plus simples de la façon de mettre en œuvre ce type de conception?
J'ai pris un coup d'œil à Where can I find a good NHibernate and ASP.NET MVC Reference Application
Et même lu le livre « ASP.NET MVC en action », mais il est par exemple est juste beaucoup plus compliqué que ce que je suis en train de réaliser. Je pensais qu'un modèle singleton fonctionnerait dans l'Application_Start du 'global.asax
' mais cela n'a pas donné les résultats espérés. Il continuerait à disposer de mon usine et ne la recréerait jamais.
Est-ce que je veux toujours 'Ouvrir' et 'Fermer' La session? Je suis désolé si j'ai l'air stupide, c'est très difficile à saisir pour moi. Les SessionFactories créent des Sessions - et les Sessions sont 'jetables' - mais je veux que les Factories restent Singleton? – Ciel
Une fabrique de sessions est une ressource coûteuse à créer, c'est pourquoi il est recommandé de la créer une seule fois pour la durée de vie de l'application et de la réutiliser. Ils sont également thread safe. Les sessions sont créées à l'aide de la fabrique de sessions chaque fois que vous avez besoin d'accéder à la base de données. Ils sont très rapides à créer et peuvent être ouverts et fermés à chaque requête. Contrairement aux usines de sessions, les sessions ne sont pas sécurisées. –
C'est exactement ce que je veux faire. Je rencontre juste des problèmes avec les usines qui sont souvent recréées dans mon code de test. Dans un scénario en direct, cela ne devrait pas arriver, n'est-ce pas? Je ne lance pas l'application souvent, et donc l'endroit où il est fait ne devrait pas être appelé à moins que je ne redémarre le site Web. – Ciel