Tengo una aplicación web que se conecta a 2 bases de datos (un núcleo, el otro es una base de datos de registro).Multiple SessionFactories in Windows Service con NHibernate
Ahora debo crear un servicio de Windows que utilizará la misma lógica comercial/DLL de acceso a datos. Sin embargo, cuando intento hacer referencia a 2 fábricas de sesión en la Aplicación de servicio y llamar al método factory.GetCurrentSession(), aparece el mensaje de error "No hay sesión vinculada al contexto actual".
¿Alguien tiene alguna sugerencia acerca de cómo se puede hacer esto?
public class StaticSessionManager
{
public static readonly ISessionFactory SessionFactory;
public static readonly ISessionFactory LoggingSessionFactory;
static StaticSessionManager()
{
string fileName = System.Configuration.ConfigurationSettings.AppSettings["DefaultNHihbernateConfigFile"];
string executingPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
fileName = executingPath + "\\" + fileName;
SessionFactory = cfg.Configure(fileName).BuildSessionFactory();
cfg = new Configuration();
fileName = System.Configuration.ConfigurationSettings.AppSettings["LoggingNHihbernateConfigFile"];
fileName = executingPath + "\\" + fileName;
LoggingSessionFactory = cfg.Configure(fileName).BuildSessionFactory();
}
}
El archivo de configuración tiene la configuración:
<property name="current_session_context_class">call</property>
El servicio establece las fábricas:
private ISession _session = null;
private ISession _loggingSession = null;
private ISessionFactory _sessionFactory = StaticSessionManager.SessionFactory;
private ISessionFactory _loggingSessionFactory = StaticSessionManager.LoggingSessionFactory;
...
_sessionFactory = StaticSessionManager.SessionFactory;
_loggingSessionFactory = StaticSessionManager.LoggingSessionFactory;
_session = _sessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(_session);
_loggingSession = _loggingSessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(_loggingSession);
Así que, finalmente, trato de llamar a la fábrica correcta por:
ISession session = StaticSessionManager.SessionFactory.GetCurrentSession();
¿Alguien puede sugerir ab? ¿Qué manera de manejar esto?
¡Gracias de antemano!
Rob
Tu pregunta ha resuelto mi pregunta :) Thx. – SadullahCeran