using session per request in an MVC model I intercept the method call
on the controller and wrap this in a transaction. you can either roll
your own interceptor or use Castle's ATM module

[Transactional]
class MyController
{
      [Transaction]
      public void Index()
      {
          this will be wrapped in a transaction
      }
}

On Oct 27, 7:02 am, kor <[email protected]> wrote:
> hi all, i need to use a session per-request pattern in a web
> enviroinment (pure asp.net 2.0) but i have same doubts.
>
> in same example i see that in the http module there's only the bind/
> unbind of the session and the transaction are explicity managed by the
> user every time that it's needed.
>
> in other examples (as uNhAddIns.Web.NHSessionWebModule) the http
> module begins and commit/rollback a transaction at begin/end of http
> request and user code is samething as
>
> void ExecuteAction(ItemA a, ItemB b)
> {
>     //internally use the context session returned by the
> sessionfactory
>     daoA.MakePersistent(a);
>         daoB.MakePersistent(b);
>
> }
>
> but in this case if daoA throws an exception i cannot understand how
> the transaction is rollback witouh an explicit try/catch, becouse in
> the end request i cannot know if data are valid to be commited or if
> they must be rollback.
>
> a solution is to explicity add the transaction management also in the
> ExecuteAction method
>
> void ExecuteAction(ItemA a, ItemB b)
> {
>     try
>         {
>                 daoA.MakePersistent(a);
>                 daoB.MakePErsistent(b);
>                 GetCurrentSession().Transaction.Commit();
>         }
>         catch(Exception)
>         {
>                 GetCurrentSession().Transaction.Rollback():
>         }
>
> }
>
> but in this case if after that methods there's same other access to
> the db (for example for data rendering) there's not an explicit
> transaction management (and i read that is a bad pattern to use the
> isession without encapsulate the usage inside a itransaction)
>
> so my final idea is to use
>
> void ExecuteAction(ItemA a, ItemB b)
> {
>     try
>         {
>                 daoA.MakePersistent(a);
>                 daoB.MakePErsistent(b);
>                 GetCurrentSession().Transaction.Commit();
>         }
>         catch(Exception)
>         {
>                 GetCurrentSession().Transaction.Rollback():
>         }
>         GetCurrentSession().BeginTransaction();
>
> }
>
> any comments?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to