Y que tipo de aplicación es, y como es el despliegue/arquitectura? Si es una app web o los servicios los consumis por WCF/WebServices lo recomendado es Session Per Request.
Saludos, El 17 de octubre de 2011 13:53, José F. Romaniello <[email protected]>escribió: > La sesión de nhibernate es un cache. > A mi entender, esa implementación del repositorio no debería estar atada a > un manejo de sesión, es decir que el ciclo de vida es algo que deberías > manejarse a un nivel mas alto. > > Como estas manejando el ciclo de vida actualmente? que patrón usas? > > saludos > > El 17 de octubre de 2011 12:30, Alexandre > <[email protected]>escribió: > > Hola a todos! >> >> >> Estoy usando nHibernate + uNhAddins. >> >> >> Mi repositorio es: >> >> public class Repository<T> : IRepository<T> where T : IEntity >> { >> private readonly ISessionFactory factory; >> >> protected ISession Session >> { >> get >> { >> return factory.GetCurrentSession(); >> } >> } >> >> public Repository(ISessionFactory factory) >> { >> this.factory = factory; >> } >> >> public IEnumerable<T> GetListCriteria(DetachedCriteria >> criteria, params Order[] orders) >> { >> return RepositoryHelper<T>.GetExecutableCriteria(Session, >> criteria, orders).List<T>(); >> } >> >> class RepositoryHelper<T> >> { >> public static ICriteria GetExecutableCriteria(ISession >> session, DetachedCriteria criteria, Order[] orders) >> { >> ICriteria executableCriteria; >> >> if (criteria != null) >> executableCriteria = >> criteria.GetExecutableCriteria(session); >> else >> executableCriteria = >> session.CreateCriteria(typeof(T)); >> >> if (orders != null) >> { >> foreach (Order order in orders) >> executableCriteria.AddOrder(order); >> } >> >> return executableCriteria; >> } >> } >> } >> >> >> Mi servicio es: >> >> var criteria = DetachedCriteria.For<RFConsumption>() >> .Add(Restrictions.Between("CounterDtm", >> dataHoraInicio, dataHoraFim)); >> >> return >> rFConsumptionRepository.GetListCriteria(criteria, >> Order.Desc("CounterDtm")); >> >> >> Cuando se ejecuta el servicio por primera vez, los datos se devuelven >> correctamente, pero si modifico el valor de un campo directamente en >> la base de datos con otra aplicación, el nuevo valor no se devuelve >> por NHibernate. >> >> Si cambio el depósito: >> >> protected ISession Session >> { >> get >> { >> factory.GetCurrentSession().Clear(); >> return factory.GetCurrentSession(); >> } >> } >> >> valor modificado por otra aplicación siempre se devuelve. >> >> ¿cuál es la mejor manera de implementar el repositorio? >> >> Creo que Session.Clear no es la mejor manera de resolver esta >> cuestión, ya que estoy usando uNhAddins en mi capa de servicio. >> >> Gracias >> >> -- >> 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 > -- Saludos, Walter G. Poch Sr. .Net Developer -------------------------------------------- Cell: +54 (9 341) 3353273 [email protected] -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
