ASP.NET MVC,NHibernate会话和NHibernate事件

时间:2012-07-30 19:56:56

标签: asp.net-mvc nhibernate httpmodule

我在ASP.NET MVC3项目中使用(Fluent)NHibernate。我正在使用通过实现自定义HttpModule为每个请求打开一个NHibernate会话的标准方法。会话在BeginRequest中打开,在EndRequest中关闭。

我正在插入Pre / Post Insert / Update事件,为我的实体编写历史记录日志。当我尝试在这些事件处理程序中保存实体时出现问题。似乎在这些事件处理程序之前已经调用了EndRequest,因此NHibernate会话已经关闭。

如何延迟关闭会话以便保存历史实体?我在rhino commons查看了一些HttpModules,但对我的情况来说似乎有点过分了。

1 个答案:

答案 0 :(得分:1)

您可能想要查看Ayende的this post。我相信你会在Revin Hart的评论中找到答案。 Ayende和Revin讨论如何让子会话处理保存更改日志实体。

ISession newSession = ev.Source.PersistenceContext.Session.GetSession();

foreach (ScheduleChangeLog changeLog in logs)
{
    changeLog.UpdatedBy = Username;
    newSession.Save(changeLog);
}