在ASP.NET MVC3中使用NHibernate事务时,因为NHibernate不支持嵌套式事务操作,所以,我们可以利用MVC3来封装一下,下面给大伙发两个代码示例:
顺路推荐下国产的cyq.data 数据框架。
因为,所以ASP.NET MVC中通常使用一个事务来封装一次请求中的数据库操作。
下面是我认为比较漂亮的写法。
using System.Web.Mvc;
using NHibernate;
namespace WebMVC.Filters
{
public class Transactional : ActionFilterAttribute
{
protected ISession _Session;
public Transactional()
{
_Session = DependencyResolver.Current.GetService<ISession>();
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_Session.BeginTransaction();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (_Session == null || !_Session.Transaction.IsActive)
return;
if (filterContext.Exception != null)
_Session.Transaction.Rollback();
else
_Session.Transaction.Commit();
}
}
}
使用起来很方便。
using System.Web.Mvc;
using WebMVC.Filters;
namespace WebMVC.Controllers
{
public class CustomersController : Controller
{
protected ICustomersRepository _CustomersRepository;
public CustomersController(ICustomersRepository customersRepository)
{
_CustomersRepository = customersRepository;
}
[Transactional]
public ActionResult List()
{
return View(_CustomersRepository.FindAll());
}
}
}
希望您能看懂上面两个简单的代码,哈哈!!!
2011/9/30 14:48:21 | Nhibernate开发教程 | |