Domanda

Ho bisogno di alcune intuizioni e pensieri su un refactoring che sto per fare per la nostra web-app.

Inizialmente abbiamo utilizzato il modello di session-per-richiesta con NHibernate e ActiveRecord utilizzando la On_BeginRequest / On_EndRequest nel HttpApplication per creare e smaltire la sessione. Più tardi, ci siamo resi conto che tutte le eccezioni DB-correlate Hai già gettate al di fuori della nostra monorotaia-contesto, il che significa che i nostri salvataggi non calci in. Come un altro effetto collaterale, non abbiamo avuto la possibilità di saltare completamente la creazione di sessioni in qualsiasi NHibernate azione, che in alcuni casi sarebbe auspicabile.

Così abbiamo riscritto per creare sessioni in Initialize () / contestualizzare () nel nostro controller di base, e disposto loro nel Dispose () del nostro controller di base. Abbiamo anche rollback della sessione nel nostro controller di salvataggio per evitare qualsiasi mezzo modifiche scritte alla DB. Fin qui tutto bene. La ragione per farlo nel Dispose () è perché vogliamo che vivere attraverso la vista rendering, a causa di motivi pigro caricamento costavano come viewcomponents che ha bisogno di ottenere una sessione (che potremmo passare a unità-di-lavoro per la viewcomponents, ma non sembrano avere un Dispose () ...)

Comunque, sto sperimentando alcuni problemi di stallo in cui abbiamo iniziato transacations nel DB che non è sempre annullate da una rollback né commesso e non riesco a ottenere la mia testa intorno ad esso, soprattutto a causa della confusione che abbiamo fatto con questo approccio ...

Così ho trovato questo articolo: http: // hackingon.net/post/NHibernate-Session-Per-Request-with-ASPNET-MVC.aspx

E ho pensato, "Filtri, possiamo usare che in monorotaia troppo!", Perché può dare dei calci in su BeforeAction e AfterRendering.

Le mie domande sono quindi:

  1. Che cosa accade se si verifica un'eccezione nel filtro?
  2. Will AfterRendering fuoco anche se si verifica un'eccezione in azione o il rendering?
  3. Consiglieresti questo approccio, in caso contrario, quali sono il suo suggerimento, invece?

Tutti gli indicatori sono molto apprezzati!

È stato utile?

Soluzione

  1. È necessario un gestore di errori di applicazione per la cura di gestione delle eccezioni.

  2. Connettere un debugger e scoprire.

  3. Probabilmente no (anche se è il mio articolo). Non funziona con RenderAction. Meglio usare un contenitore IoC per controllare la durata delle connessioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top