我目前从 globalasax 获得我的会话如下......
public class MvcApplication : HttpApplication
{
public static readonly ISessionFactory SessionFactory = NHibernateHelper.CreateSessionFactory();
public MvcApplication()
{
BeginRequest += delegate
{
if (!HttpContext.Current.Request.Url.AbsolutePath.StartsWith("/_cassette/"))
{
CurrentSession = SessionFactory.OpenSession();
CurrentSession.FlushMode = FlushMode.Auto;
}
};
EndRequest += delegate
{
if (CurrentSession != null)
{
CurrentSession.Flush();
CurrentSession.Dispose();
}
};
}
public static ISession CurrentSession
{
get { return (ISession) HttpContext.Current.Items["current.session"]; }
set { HttpContext.Current.Items["current.session"] = value; }
我正在查看 Sharp Architecture Transaction 属性和一个类似的http://weblogs.asp.net/srkirkland/archive/2009/09/03/asp-net-mvc-transaction-attribute-using-nhibernate.aspx但是什么在 MVC4 项目中处理会话以利用非隐式事务的最佳方式http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
我可以通过将事务/提交添加到开始请求/结束请求来轻松包装所有内容,但属性方法看起来更干净(实际上处理错误);还是我现在应该使用过滤器?
MVC4 与 NHibernate 的最佳实践是什么?