by luisabreu via LA.NET [EN] on 4/29/2009 12:26:07 PM
Today we’ll keep looking at the SharpArch.Web assembly and we’ll take a quick look at the TransactionAttribute. TransactionAttribute is an ActionFilterAttribute which intercepts the ActionExecuting and ActionExecute exceptions for starting and ending a transaction. Here’s the code for that class:
public class TransactionAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { NHibernateSession.Current.BeginTransaction(); }
public override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.Exception == null && NHibernateSession.Current.Transaction.IsActive) { NHibernateSession.Current.Transaction.Commit(); } } }
As you can see, the code relies (yet again!) on the omnipresent NHibernateSession class we’ve met in a past post. Notice that the transaction is only committed when the action method doesn’t throw an exception and when the current transaction is still active. Combining this attribute with the WebSessionStorage we’ve met in the last post makes working with transactions (and db related stuff) from an action method a breeze…
If you don’t believe me, then take a look at the following action method (copied from the CustomersController class in the Northwind sample app):
[Transaction] public ActionResult Create(string companyName, string assignedId) { Customer customer = new Customer(companyName); customer.SetAssignedIdTo(assignedId); customerRepository.Save(customer);
return View(customer); }
As you can see, there’s no evidence of database code here. This is probably good and it will let you isolate the action method code from any of those concerns. Simple and elegant.
And that’s it for today. Keep tuned for more on the S#arp framework.
Original Post: The S#arp framework: The SharpArch.Web assembly – part II
The content of the postings is owned by the respective author. CSharpFeeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on CSharpFeeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.