我有一个 ASP.Net Web API 项目。我在这个项目中使用 NHibernate;Fluent NHibernate 是具体的。我正在使用自定义 ActionFilterAttribute 处理 NHib 会话管理。它看起来像这样:
public class SessionManagement : ActionFilterAttribute
{
public SessionManagement()
{
SessionFactory = WebApiApplication.SessionFactory;
}
private ISessionFactory SessionFactory { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
var session = SessionFactory.OpenSession();
CurrentSessionContext.Bind(session);
session.BeginTransaction();
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var session = SessionFactory.GetCurrentSession();
var transaction = session.Transaction;
if (transaction != null && transaction.IsActive)
{
transaction.Commit();
}
session = CurrentSessionContext.Unbind(SessionFactory);
session.Close();
}
这很适合我的需求。但是,我最近添加了一个自定义 JSON.NET MediaTypeFormatter 来格式化我的操作生成的 JSON。我遇到的问题是我的 ActionFilter OnActionExecuted() 方法在 MediaTypeFormatter 的 WriteToStreamAsync 可以完成工作之前被调用。结果是延迟加载的(问题)集合现在不可用,因为会话已关闭。处理这个问题的最佳方法是什么?我应该删除 ActionFilter 的 OnActionExecuted 方法并在 MediaTypeFormatter 中关闭我的会话吗?
谢谢!!