Est l'unité de travail plus efficace si je ne me soucie pas des transactions etc?
-
06-09-2019 - |
Question
Si j'ai 10 appels de base de données sur ma page web, et aucun d'entre eux nécessitent des transactions, etc. Ils sont tout simplement obtenir des données de la base de données (lit), dois-je utiliser l'unité de la classe de travail?
Est-ce parce que la création d'une nouvelle session par appel de la base de données est trop cher?
La solution
Avec NHibernate, la création de l'usine de session est très cher (donc vous aurez envie de mettre en cache l'usine de la session une fois qu'il est créé, probablement sur le HttpApplication
), mais la création de session est vraiment pas cher. En d'autres termes, si elle maintient votre propre code, les créations de session multiples ne sont pas nécessairement une mauvaise chose. Je pense que la documentation NH dit mieux:
Un ISessionFactory est un coûteux à créer, objet threadsafe destiné à être partagé par tous threads d'application. Un ISession est un peu coûteux, objet non threadsafe qui devrait être utilisé qu'une seule fois, pour une seule processus d'affaires, puis mis au rebut.
Ainsi, en utilisant le modèle UOW est probablement pas plus efficace en raison de la charge supplémentaire, mais il est une bonne pratique et les frais généraux est probablement ne va pas te faire du mal. L'optimisation prématurée et tout cela.
Autres conseils
Oui, vous devez utiliser une transaction. Du blog de Ayende:
« NHibernate supposer que tous les accès à la base de données est effectuée en vertu d'une transaction, et décourager fortement l'utilisation de la session sans une transaction. »
Pour plus de détails, voici un lien vers son blog annonce: