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
