我正在使用ASP.NET MVC 4 Web API以及AutoFac和Fluent NHibernate。在过去,我已经没有问题让以下代码工作:
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (!CurrentSessionContext.HasBind(SessionFactory))
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
var session = SessionFactory.GetCurrentSession();
session.BeginTransaction();
}
突然间,当我尝试检查CurrentSessionContext是否绑定时,看起来CurrentSessionContext为null。我尝试了多种设置方法,例如以下流畅的配置:
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is(@"connectionStringHere")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.CurrentSessionContext<WebSessionContext>()
.BuildSessionFactory();
以及:
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is(@"connectionStringHere")))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.CurrentSessionContext("web")
.BuildSessionFactory();
不幸的是,由于System.Web.Http.Controllers.HttpActionContext没有公开HttpContext,因此从未设置过CurrentSessionContext。这似乎是MVC 4 API行为的改变,因为这个确切的代码以前在过去的项目中工作过。
为了解决这个问题,我考虑过创建一个自定义的CurrentSessionContext类,但看起来可能需要一些带有ReflectiveHttpContext类的伏都教 - 不知道我会怎么做。
任何建议都将不胜感激。
谢谢!