Solucionado problema Era debido a que en el Session_End instanciamos una nueva versión de NhIbernate.
Ya funciona todo perfecto. Gracias a todos por el interés y por las soluciones aportadas. El 31 de agosto de 2010 17:00, Maria Teresa Ruiz Espinosa < [email protected]> escribió: > Te mando la imagen del NhibernateProfiler en el que se puede ver como unas > veces abre una session cada vez y otras usa la misma hasta más de 100 veces > > > El 31 de agosto de 2010 16:31, Maria Teresa Ruiz Espinosa < > [email protected]> escribió: > > Puede ser que la parte session = _sessionFactory[database].OpenSession(); >> >> este cogiendo siempre la misma session, ya que la base de datos es siempre >> la misma. >> >> public static class NHibernateSession >> { >> public const string BBDD_OFITOUR = "OfiTour"; >> public const string BBDD_OFICONTA = "OfiConta"; >> >> static readonly IDictionary<string, ISessionFactory> >> _sessionFactory = new Dictionary<string, ISessionFactory>(); >> >> // Lo convierto en propiedad porque necesitamos cambiarlo en el >> transcurso de la inicialización de la aplicación: >> public static ISessionStorage SessionStorage { get; set; } >> >> public static void Init(ISessionStorage sessionStorage, >> IConfiguracionBD configuracionBD, Assembly assembly) >> { >> SessionStorage = sessionStorage; >> >> foreach (var conexion in configuracionBD.ListaDatosConexion) >> { >> var configuracionSessionFactory = new Configuration(); >> >> >> configuracionSessionFactory.SetProperty("connection.connection_string", >> conexion.DameConnectionString()); >> configuracionSessionFactory.Configure(); >> >> configuracionSessionFactory.AddAssembly(assembly); >> >> _sessionFactory[conexion.NombreConexion] = >> configuracionSessionFactory.BuildSessionFactory(); >> } >> } >> >> public static ISession Session(string database) >> { >> if (SessionStorage == null) >> { >> throw new Exception("NHibernateSession no está >> inicializado. Llama a Init antes de operar con él. Comprueba también que >> haya un ISessionStorage asociado a NHibernate."); >> } >> >> ISession session = SessionStorage.Session(database); >> if (session == null) >> { >> session = _sessionFactory[database].OpenSession(); >> session.FlushMode = FlushMode.Commit; >> SessionStorage.SetSession(database, session); >> } >> >> return session; >> } >> } >> >> El 31 de agosto de 2010 14:30, José F. Romaniello <[email protected] >> > escribió: >> >> casi nunca algo esta completamente mal... Sin duda debe haber alguna parte >>> del código que esta mal y que nosotros no llegamos a ver aca... >>> A mi me parece que el error puede llegar a estar dentro de esta clase: >>> public static class NHibernateSession >>> >>> me despierta sospecha.... >>> >>> El 31 de agosto de 2010 08:45, Maria Teresa Ruiz Espinosa < >>> [email protected]> escribió: >>> >>> Pero tu has visto como creamos las sessiones, y >>>> o tenia claro que se hacia un session.close en cada >>>> application_EndRequest >>>> >>>> public static void Application_EndRequest(object sender, EventArgs e) >>>> { >>>> var sesionesActivas = >>>> HttpContext.Current.Items.Contains(CLAVE_SESIONES) ? >>>> HttpContext.Current.Items[CLAVE_SESIONES] : null; >>>> if (sesionesActivas != null) >>>> { >>>> foreach (var session in ((IDictionary<string, >>>> ISession>)sesionesActivas).Values) >>>> { >>>> if (session.Transaction != null && >>>> session.Transaction.IsActive) >>>> { >>>> try >>>> { >>>> session.Transaction.Commit(); >>>> } >>>> catch >>>> { >>>> session.Transaction.Rollback(); >>>> } >>>> } >>>> session.Close(); >>>> } >>>> } >>>> } >>>> >>>> Entonces esto esta completamente mal.¿?¿? >>>> >>>> >>>> >>>> >>>> >>>> >>>> El 31 de agosto de 2010 13:24, José F. Romaniello < >>>> [email protected]> escribió: >>>> >>>>> Me parece que me estoy volviendo adivino. >>>>> >>>>> El 31 de agosto de 2010 07:50, Maria Teresa Ruiz Espinosa < >>>>> [email protected]> escribió: >>>>> >>>>> El NHibernateProfiler me dice este error: *Alert: Using a single >>>>>> session in multiple threads is likely a bug* >>>>> >>>>> >>>>> >>>>> *Te copio exactamente lo que te dije en el primer mail que te envié:* >>>>> >>>>> Bajo ningún punto de vista deberías usar la misma session, desde >>>>>> diferentes threads, y creo que viene por ahí tu problema. >>>>> >>>>> >>>>> -- >>>>> Para escribir al Grupo, hágalo a esta dirección: >>>>> [email protected] >>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>>>> >>>> >>>> -- >>>> Para escribir al Grupo, hágalo a esta dirección: >>>> [email protected] >>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>>> >>> >>> -- >>> Para escribir al Grupo, hágalo a esta dirección: >>> [email protected] >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>> >> >> > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
