一个NHibernate的问题
熟悉这个框架的请帮忙看下,多谢了。
如果单步的话,因为已经判断_Session是否为空,同时之前的代码也操作过_Session.Connection了,那么程序应该不会在这个地方报错。所以就怀疑是不是并发造成的问题。
![]()
如果单步的话,因为已经判断_Session是否为空,同时之前的代码也操作过_Session.Connection了,那么程序应该不会在这个地方报错。所以就怀疑是不是并发造成的问题。
public class SessionFactory
{
private static ISession _session = null;
private static ISessionManage _sessionManage = null;
#region[这里不需要重新设置config文件]
//public static string CfgFileName { get; set; }
#endregion[]
static SessionFactory()
{
Init();
}
/// <summary>
/// 获取实现NHibernate.ISession接口的Session实例
/// </summary>
/// <returns>返回实现NHibernate.ISession接口的类实例</returns>
//[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.Synchronized)]
public static ISession GetSession()
{
_session = _sessionManage.Get();
if (_session == null)
{
#region[结果这里就成了null]
//NHibernateSession.CfgFileName = CfgFileName;
#endregion
_session = NHibernateSession.GetNHibernateSession();
_sessionManage.Set(_session);
}
if (!_session.IsOpen)
{
#region[这里也跟着出错了]
//NHibernateSession.CfgFileName = CfgFileName;
#endregion
_session = NHibernateSession.GetNHibernateSession();
_sessionManage.Set(_session);
}
if (!_session.IsConnected) _session.Reconnect();
if (_session.Connection.State == ConnectionState.Closed)
{
_session.Connection.Open();
}
else if (_session.Connection.State == ConnectionState.Broken)
{
_session.Connection.Close();
_session.Connection.Open();
}
return _session;
}
public static void CloseSession()
{
ISession s = GetSession();
if (s != null)
{
s.Close();
}
_sessionManage.Set(null);
}
private static void Init()
{
//CfgFileName = AppConst.ServerDataCfg;
System.Reflection.Assembly ass = System.Reflection.Assembly.Load(SessionConfigManage.AssemblyName);
_sessionManage = (ISessionManage)ass.CreateInstance(SessionConfigManage.SessionSourceItemName);
}
}
...全文
相关推荐
NHibernate帮助手册
此外,学习 NHibernate 时,可能会遇到文档不全的问题,可以参考社区的翻译和讨论,以及实践经验的分享,共同进步。
NHibernate学习笔记
### NHibernate学习笔记知识点梳理#### 一、NHibernate简介及基本概念- **NHibernate** 是一个开源的对象关系映射(ORM)解决方案,用于.NET框架。
Nhibernate代码生成模板v1_1.rar
NHibernate代码生成模板v1_1"着重于修复了v1.0版本的一个主要问题,即在处理复合主键时,实体类在运行时会引发Nhibernate错误。
NHibernate之旅
.GA#### 社区资源加入NHibernate中文社区是一个很好的开始,可以在社区中交流经验、解决问题并找到更多的学习资源。
一个最简单的NHibernate程序
在实际项目中,还需要考虑事物管理、性能优化、错误处理等问题。此外,Fluent NHibernate提供了一种更简洁的API来替代XML映射,使得配置和映射更加直观。


