一个NHibernate的问题

caobob caobob 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
熟悉这个框架的请帮忙看下,多谢了。
如果单步的话,因为已经判断_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);
}
}
...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
caobob
C# 111,128 成员 642,536 内容