我正在尝试对每个请求使用流畅的会话。我正在遵循nhibernate cookbook中的“配方”,但是它使用了nhibernate配置文件。
我不确定什么是更好但是现在我坚持使用流畅的配置只是因为我不知道如何设置nhibernate配置文件以使用流畅的映射和vanilla nhibernate映射(hbm文件)。
namespace Demo.WebUI
{
public class MvcApplication : NinjectHttpApplication
{
public static ISessionFactory SessionFactory { get; private set; }
protected override void OnApplicationStarted()
{
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(
c => c.FromConnectionStringWithKey("test")))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf
<Demo.Framework.Data.NhibernateMapping.UserMap>())
.ExposeConfiguration(BuidSchema)
.BuildSessionFactory();
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var session = SessionFactory.OpenSession();
//CurrentSessionContext.Bind(session);
}
protected void Application_EndRequest(object sender, EventArgs e)
{
//var session = CurrentSessionContext.Unbind(SessionFactory);
SessionFactory.Dispose();
}
}
}
正如您在Begin_Request中看到的那样,书籍教程已经
CurrentSessionContext.Bind(session);
但是如果我使用它会引发错误,因为我没有使用nhibernate配置文件。
那么如何更改它以使用流畅的配置?或者我甚至不需要这样做?(即它是在内部完成的吗?)
答案 0 :(得分:12)
您需要告诉NHibernate如何处理会话上下文。以下可能有效:
Fluently.Configure()
...
.ExposeConfiguration(cfg => cfg.SetProperty(
Environment.CurrentSessionContextClass,
"web")
此外,与此无关:您正在EndRequest上处理SessionFactory。这是一个错误。
答案 1 :(得分:0)
如果你的项目是Asp.Net网站(不是网络应用程序),那么在Global.asax你应该这样使用
NHibernate.Cfg.Environment.CurrentSessionContextClass