Ho una webapp che si collega a 2 DB (un core, l'altro è un DB di registrazione).Multiple SessionFactories in Windows Service con NHibernate
Ora devo creare un servizio di Windows che utilizzerà la stessa logica di business/DLL di accesso ai dati. Tuttavia, quando provo a fare riferimento a 2 factory di sessione nell'app del servizio e a chiamare il metodo factory.GetCurrentSession(), viene visualizzato il messaggio di errore "Nessuna sessione è legata al contesto corrente".
Qualcuno ha un suggerimento su come questo può essere fatto?
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();
}
}
Il file di configurazione è l'impostazione:
<property name="current_session_context_class">call</property>
Il servizio imposta le fabbriche:
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);
Così alla fine, provo a chiamare il corretto fabbrica da:
ISession session = StaticSessionManager.SessionFactory.GetCurrentSession();
Qualcuno può suggerire un modo migliore per gestire questo?
Grazie in anticipo!
Rob
La tua domanda ha risolto la mia domanda :) Grazie. – SadullahCeran