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

Responder a