José e Walter, Muchas gracias, funcionó a la perfección con EndMode.End.
Romaniello, gran trabajo con unhAddins y nHibernate. Me gusta más cada día aprendiendo! Saludos! On 18 oct, 11:22, José F. Romaniello <[email protected]> wrote: > exactamente lo que dijo Walter, podrías usar EndMode.End sobre el metodo que > busca los datos. Eso te garantiza que al finalizar dicho metodo se cierra la > sesión. > Al volver a llamar el metodo, otra sesión se vuelve a crear. > > saludos, > > El 17 de octubre de 2011 22:19, Walter Poch <[email protected]>escribió: > > > > > > > > > Hola, > > > Mirá desconozco bien el manejo de PersistenceConversational como la esta > > haciendo, pero lo que recuerdo es que esto manejaba la Unit Of Work ( > >http://martinfowler.com/eaaCatalog/unitOfWork.html) que en NHibernate > > sería la Session. > > > Lo que te está pasando es porque la Unit Of Work (Session) es la misma con > > la que estás leyendo los datos antes de cambiar el dato en la DB y LUEGO de > > cambiar el dato; para que NHibernate se de cuenta debería ser otra Session. > > > En algún momento tus métodos deberían terminar la Unit Of Work (al grabar > > una entidad o al cancelar los cambios por ejemplo), deberías ver el ejemplo > > en unhaddins como es su uso. Lamentablemente no puedo ayudarte más ya que no > > lo utilizo. > > > Saludos, > > > El 17 de octubre de 2011 17:33, Alexandre > > <[email protected]>escribió: > > > Olá Todos! > > >> Es una aplicación WPF y estoy siguiendo las ideas de > >> ChinookMediaManager. > > >> Tengo un nivel de servicio: > > >> [PersistenceConversational(MethodsIncludeMode = > >> MethodsIncludeMode.Implicit, DefaultEndMode = EndMode.Continue)] > >> public class FornosConsumoService : IFornosConsumoService > >> { > >> private readonly IRepository<RFConsumption> > >> rFConsumptionRepository; > > >> public FornosConsumoService(IRepository<RFConsumption> > >> rFConsumptionRepository) > >> { > >> this.rFConsumptionRepository = rFConsumptionRepository; > >> } > > >> /// <summary> > >> /// Consulta consumo por hora (período) > >> /// </summary> > >> /// <param name="dataHoraInicio"></param> > >> /// <param name="dataHoraFim"></param> > >> /// <returns></returns> > >> public IEnumerable<RFConsumption> ConsultarPorHora(DateTime > >> dataHoraInicio, DateTime dataHoraFim) > >> { > >> try > >> { > >> var criteria = DetachedCriteria.For<RFConsumption>() > >> .Add(Restrictions.Between("CounterDtm", > >> dataHoraInicio, dataHoraFim)); > > >> return > >> rFConsumptionRepository.GetListCriteria(criteria, > >> Order.Desc("CounterDtm")); > >> } > >> catch (Exception ex) > >> { > >> Log.Error(Strings.EventNatureFornosConsumo, > >> Strings.MessageExceptionConsult, ex); > >> throw; > >> } > >> } > >> } > > >> Tengo un configurador GuyWire > > >> public class GeneralGuyWire : IGuyWire > >> { > >> private readonly IConfigurator[] configurators = new > >> IConfigurator[] > >> { > >> new > >> NHibernateConfigurator(), > >> new > >> GUIsConfigurator(), > >> new > >> RepositoriesConfigurator(), > >> new > >> ServicesConfigurator() > >> }; > > >> private IWindsorContainer container; > > >> public void Wire() > >> { > >> try > >> { > >> if (container != null) > >> Dewire(); > > >> container = new WindsorContainer(); > > >> container.AddFacility<FactorySupportFacility>(); > > >> ServiceLocator.SetLocatorProvider(() => new > >> WindsorServiceLocator(container)); > > >> container.Register(Component.For<IServiceLocator>().Instance(ServiceLocator > >> .Current)); > > >> foreach (IConfigurator configurator in configurators) > >> configurator.Configure(container); > >> } > >> catch (Exception ex) > >> { > >> Log.Error(Strings.EventNatureSystem, "Exceção ao > >> configurar aplicação!", ex); > >> ShowMessage.Error("Exceção ao configurar aplicação!", > >> ex.Message); > >> throw; > >> } > >> } > > >> public void Dewire() > >> { > >> Log.Debug(Strings.EventNatureSystem, "Executando..."); > > >> if (container != null) > >> container.Dispose(); > >> } > >> } > > >> public class ServicesConfigurator : IConfigurator > >> { > >> public void Configure(IWindsorContainer container) > >> { > >> try > >> { > >> IEnumerable<Type> DomainServicesInterfaces = > >> typeof(IFornosConfiguracaoService).Assembly > >> .GetTypes().Where(t => t.IsInterface && > >> t.Namespace.EndsWith("Service")); > > >> IEnumerable<Type> DomainServices = > >> Assembly.Load("PCT.Service").GetTypes() > >> .Where(t => t.GetInterfaces().Any(i => > >> DomainServicesInterfaces.Contains(i))); > > >> foreach (Type domainServicesInterfaces in > >> DomainServicesInterfaces) > >> foreach (Type domainServices in DomainServices) > >> if > >> (domainServicesInterfaces.IsAssignableFrom(domainServices)) > >> { > >> Log.Info(Strings.EventNatureSystem, > >> "Registrando " + domainServices.Name + "..."); > > >> container.Register(Component.For(domainServicesInterfaces).ImplementedBy(do > >> mainServices).LifeStyle.Transient); > >> } > >> } > >> catch (Exception ex) > >> { > >> Log.Error(Strings.EventNatureSystem, "Exceção ao > >> registrar serviços!", ex); > >> throw; > >> } > >> } > >> } > > >> public class RepositoriesConfigurator : IConfigurator > >> { > >> public void Configure(IWindsorContainer container) > >> { > >> try > >> { > > >> container.Register(Component.For(typeof(IRepository<>)).ImplementedBy(typeo > >> f(Repository<>)).LifeStyle.Transient); > >> } > >> catch (Exception ex) > >> { > >> Log.Error(Strings.EventNatureSystem, "Exceção ao > >> registrar repositórios!", ex); > >> throw; > >> } > >> } > >> } > > >> he implementado mi repositorio basado en el siguiente class (Chinook): > > >> namespace ChinookMediaManager.Data.Impl > >> { > >> public class Dao<T> : IDao<T> > >> { > >> protected readonly ISessionFactory Factory; > > >> public Dao(ISessionFactory factory) > >> { > >> Factory = factory; > >> } > > >> protected ISession CurrentSession > >> { > >> get { return Factory.GetCurrentSession(); } > >> } > > >> #region IDao<T> Members > > >> public T Get(object id) > >> { > >> return CurrentSession.Get<T>(id); > >> } > > >> .... > > >> Estoy confundido acerca de la interacción entre unhAddins e > >> nHibernate. Creo que la configuración de unhAddins es correcta porque > >> se obtienen los datos correctamente en la primera llamada. > > >> Después de cambiar el valor de un campo (via Toad - BD Oracle), corro > >> de nuevo el servicio, pero los datos anteriores siguen siendo los > >> mismos en la memoria. Este es el comportamiento de cache de > >> nHibernate? > > >> Gracias > > >> On 17 oct, 15:42, Walter Poch <[email protected]> wrote: > >> > 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 > > ... > > leer más » -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
