【发布时间】:2017-05-01 17:19:58
【问题描述】:
在今年 12 月初之前,我们当前的代码可以正常运行。最近我们有多个实例出现此错误。我无法发现我们当前的代码有任何问题。我们正在 global.asax 中创建一个 SessionFactory。然后为事务绑定和取消绑定。代码如下:
protected void Application_BeginRequest(object sender, EventArgs e)
{
try
{
if (!CurrentSessionContext.HasBind(sessionFactory))
{
CurrentSessionContext.Bind(sessionFactory.OpenSession());
}
}
catch (Exception ex)
{
Logging.logError(ex);
}
}
protected void Application_EndRequest(object sender, EventArgs e)
{
try
{
var session = CurrentSessionContext.Unbind(sessionFactory);
if (session != null)
{
session.Dispose();
}
}
catch (Exception ex)
{
Logging.logError(ex);
}
}
当我们的代码运行 session.Update(entity) 时,我们偶尔会遇到非法操作错误。我们还能做些什么来防止这个问题发生吗?
如果它来自我们的会话工厂的设置,这是我们创建会话工厂的代码:
sessionFactory = Fluently.Configure()
.Database(OracleClientConfiguration.Oracle10.ConnectionString(System.Configuration.ConfigurationManager.ConnectionStrings["nHibernateConnection"].ToString()).ShowSql())
.ExposeConfiguration(cfg => cfg.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, "web"))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyObjectMap>())
.ExposeConfiguration(cfg =>
{
UpdateEventListener updateListener = new UpdateEventListener();
cfg.EventListeners.PreUpdateEventListeners =
new IPreUpdateEventListener[] { updateListener };
cfg.EventListeners.PostLoadEventListeners =
new IPostLoadEventListener[] { updateListener };
cfg.EventListeners.PostUpdateEventListeners =
new IPostUpdateEventListener[] { updateListener };
cfg.EventListeners.PreInsertEventListeners =
new IPreInsertEventListener[] { updateListener };
cfg.EventListeners.PostInsertEventListeners =
new IPostInsertEventListener[] { updateListener };
})
.BuildSessionFactory();
【问题讨论】:
标签: c# session nhibernate fluent-nhibernate