Question

Je besoin de quelques idées et réflexions sur un refactoring Je suis sur le point de faire à notre web-app.

Nous avons d'abord utilisé le modèle de session par demande avec NHibernate et ActiveRecord en utilisant le On_BeginRequest / On_EndRequest dans le HttpApplication pour créer et éliminer la session. Plus tard, nous avons réalisé que les exceptions liées DB-GOT jetés hors de notre monorail contexte, ce qui signifie que nos opérations de sauvetage n'entrent en jeu. Comme autre sideeffect, on n'a pas eu la possibilité de sauter complètement la création de sessions NHibernate dans tous les action, qui, dans certains cas serait souhaitable.

Nous l'avons réécrite pour créer des sessions dans initialize () / Contextualiser () dans notre contrôleur de base, et les disposés dans le Dispose () de notre contrôleur de base. Nous Rollback également la session dans notre contrôleur de secours pour empêcher toute modification moitié par écrit à la DB. Jusqu'ici tout va bien. La raison de le faire dans le Dispose () est parce que nous voulons vivre dans la vue-rendu, pour des raisons de chargement paresseux aswell comme viewcomponents qui a besoin d'obtenir une session (on pourrait passer aux unités de travail pour la viewcomponents, mais ils ne semblent pas avoir un Dispose () ...)

Cependant, j'éprouve des problèmes de blocage où nous avons commencé transacations dans le DB qui ne se rollbacked ni commis et je ne peux pas obtenir ma tête autour d'elle, surtout à cause du gâchis que nous avons fait avec ce approche ...

Je trouve cet article: http: // hackingon.net/post/NHibernate-Session-Per-Request-with-ASPNET-MVC.aspx

Et je pensais, « Filtres, nous pouvons l'utiliser en monorail aussi! », Car il peut botter le BeforeAction et AfterRendering.

Mes questions sont donc:

  1. Qu'est-ce qui se passe si une exception se produit dans le filtre?
  2. Will feu AfterRendering même si une exception se produit dans l'action ou le rendu?
  3. recommanderiez-vous cette approche, sinon, quelles sont vos suggestions à la place?

Les pointeurs sont très appréciés!

Était-ce utile?

La solution

  1. Vous avez besoin d'un gestionnaire d'erreur d'application pour prendre soin de la gestion des exceptions.

  2. Joindre un débogueur et trouver.

  3. Probablement pas (même si elle est mon article). Il ne fonctionne pas avec RenderAction. Il vaut mieux utiliser un conteneur IoC pour contrôler la durée de vie des connexions.

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