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