Muchas gracias José e Walter!
Funcionó muy bien!

    [PersistenceConversational(MethodsIncludeMode =
MethodsIncludeMode.Implicit, DefaultEndMode = EndMode.End)]
    public class FornosConsumoService : IFornosConsumoService

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

Responder a