我嘗試了一種簡單樸素的方式,至少似乎現在工作。我在這裏做了什麼根本錯誤?當線程退出時,這些變量是否會被垃圾收集?
public static class SessionManager
{
[ThreadStatic]
private static IDictionary<ISessionFactory, ISession> _sessions;
public static ISession GetSession(Type type)
{
var burrow = new BurrowFramework();
if (burrow.WorkSpaceIsReady)
{
return burrow.GetSession(type);
}
else
{
if (_sessions == null)
{
_sessions = new Dictionary<ISessionFactory, ISession>();
}
var factory = burrow.GetSessionFactory(type);
if (!_sessions.ContainsKey(factory))
{
_sessions[factory] = null;
}
var session = _sessions[factory];
if (session == null || !session.IsOpen)
{
session = _sessions[factory] = factory.OpenSession();
}
return session;
}
}
}
我發現ThreadStaticSessionContext在NHibernate的,但這似乎只支持一個SessionFactory的(有計劃的升級迫使我用幾個這是我開始與洞穴擺在首位的原因之一) 另一個問題是如何讓Burrow使用這個和web上下文.. – simendsjo 2010-06-08 12:01:46