mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Fixing IContentManagerSession usage
This commit is contained in:
@@ -15,17 +15,18 @@ namespace Orchard.Data {
|
|||||||
public class SessionLocator : ISessionLocator, ITransactionManager, IDisposable {
|
public class SessionLocator : ISessionLocator, ITransactionManager, IDisposable {
|
||||||
private readonly ISessionFactoryHolder _sessionFactoryHolder;
|
private readonly ISessionFactoryHolder _sessionFactoryHolder;
|
||||||
private readonly IEnumerable<ISessionInterceptor> _interceptors;
|
private readonly IEnumerable<ISessionInterceptor> _interceptors;
|
||||||
private Func<IContentManagerSession> _contentManagerSession;
|
private Func<IContentManagerSession> _contentManagerSessionFactory;
|
||||||
|
|
||||||
private ISession _session;
|
private ISession _session;
|
||||||
|
private IContentManagerSession _contentManagerSession;
|
||||||
|
|
||||||
public SessionLocator(
|
public SessionLocator(
|
||||||
ISessionFactoryHolder sessionFactoryHolder,
|
ISessionFactoryHolder sessionFactoryHolder,
|
||||||
Func<IContentManagerSession> contentManagerSession,
|
Func<IContentManagerSession> contentManagerSessionFactory,
|
||||||
IEnumerable<ISessionInterceptor> interceptors) {
|
IEnumerable<ISessionInterceptor> interceptors) {
|
||||||
_sessionFactoryHolder = sessionFactoryHolder;
|
_sessionFactoryHolder = sessionFactoryHolder;
|
||||||
_interceptors = interceptors;
|
_interceptors = interceptors;
|
||||||
_contentManagerSession = contentManagerSession;
|
_contentManagerSessionFactory = contentManagerSessionFactory;
|
||||||
|
|
||||||
Logger = NullLogger.Instance;
|
Logger = NullLogger.Instance;
|
||||||
IsolationLevel = IsolationLevel.ReadCommitted;
|
IsolationLevel = IsolationLevel.ReadCommitted;
|
||||||
@@ -75,12 +76,12 @@ namespace Orchard.Data {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
_contentManagerSession.Clear();
|
||||||
|
|
||||||
Logger.Debug("Disposing session");
|
Logger.Debug("Disposing session");
|
||||||
_session.Close();
|
_session.Close();
|
||||||
_session.Dispose();
|
_session.Dispose();
|
||||||
_session = null;
|
_session = null;
|
||||||
|
|
||||||
_contentManagerSession().Clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,6 +95,7 @@ namespace Orchard.Data {
|
|||||||
Logger.Debug("Opening NHibernate session");
|
Logger.Debug("Opening NHibernate session");
|
||||||
_session = sessionFactory.OpenSession(new OrchardSessionInterceptor(_interceptors.ToArray(), Logger));
|
_session = sessionFactory.OpenSession(new OrchardSessionInterceptor(_interceptors.ToArray(), Logger));
|
||||||
_session.BeginTransaction(level);
|
_session.BeginTransaction(level);
|
||||||
|
_contentManagerSession = _contentManagerSessionFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
class OrchardSessionInterceptor : IInterceptor {
|
class OrchardSessionInterceptor : IInterceptor {
|
||||||
|
Reference in New Issue
Block a user