現在、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; }
私はSharpArchitectureTransaction属性と同様の属性を見ていましたhttp://weblogs.asp.net/srkirkland/archive/2009/09/03/asp-net-mvc-transaction-attribute-using-nhibernate.aspxしかしwhats http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactionsで暗黙的でないトランザクションを利用するためのMVC4プロジェクトでセッションを処理する最良の方法
トランザクション/コミットを開始リクエスト/終了リクエストに追加することですべてを簡単にラップできますが、属性メソッドはよりクリーンに見えます(実際にはエラーを処理します)。または、今フィルターを使用する必要がありますか?
NHibernateを使用したMVC4のベストプラクティスは何ですか?