nhibernate系列之二 SessionStorageBase
using NHibernate;
using System.Web;
using System.Collections;
namespace Com.Zfrong.Arch.Common.Data.NH.Session.Storage
{
internal abstract class SessionStorageBase : ISessionStorage
{
protected static object locker = new object();
protected static ISessionStorage instance;
const string SessionKeyName = "Session_";
const string SessionFactoryKeyName = "SessionFactory_";
protected abstract IDictionary Items
{
get;
}
public bool RemoveSession(string key)
{
key = string.Format("{0},{1}", SessionKeyName, key);
ISession session = (ISession)this.Items[key];
if (session != null && (session.IsConnected || session.IsOpen))
{
session.Disconnect();
session.Close(); session.Dispose();
this.Items.Remove(key);
return true;
}
return false;
}
public bool RemoveSessionFactory(string key)
{
key = string.Format("{0},{1}", SessionFactoryKeyName, key);
ISessionFactory sessionFactory = (ISessionFactory)this.Items[key];
if (sessionFactory != null && !sessionFactory.IsClosed)
{
sessionFactory.Close(); sessionFactory.Dispose();
this.Items.Remove(key);
return true;
}
return false;
}
public ISession GetSession(string key)
{
ISession session = (ISession)this.Items[string.Format("{0},{1}", SessionKeyName, key)];
if (session != null && !session.IsConnected)
session.Reconnect();
return session;
}
public ISessionFactory GetSessionFactory(string key)
{
return (ISessionFactory)this.Items[string.Format("{0},{1}", SessionFactoryKeyName, key)];
}
public void SetSession(string key, ISession value)
{
key = string.Format("{0},{1}", SessionKeyName, key);
if (value != null)
{
if (this.Items.Contains(key))
{
this.Items[key] = value;
}
else
{
this.Items.Add(key, value);
}
}
else
{
this.Items.Remove(key);
}
}
public void SetSessionFactory(string key, ISessionFactory value)
{
key = string.Format("{0},{1}", SessionFactoryKeyName, key);
if (value != null)
{
if (this.Items.Contains(key))
{
this.Items[key] = value;
}
else
{
this.Items.Add(key, value);
}
}
else
{
this.Items.Remove(key);
}
}
}
}