0

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

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

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

4

1 回答 1

1

您可能想查看 Ayende 的这篇文章。相信您会在 Revin Hart 的评论中找到答案。Ayende 和 Revin 谈到让子会话来处理保存更改日志实体。

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

foreach (ScheduleChangeLog changeLog in logs)
{
    changeLog.UpdatedBy = Username;
    newSession.Save(changeLog);
}
于 2012-07-31T04:33:13.757 回答