一个NHibernate的问题

caobob 2012-07-23 05:18:02
熟悉这个框架的请帮忙看下,多谢了。
如果单步的话,因为已经判断_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);
}
}
...全文
96 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧