Gracias por compartir este metodo, solucione en unhaddins el mismo problema
de merge con las collections de WPF,  copiando tu implementación.


El 24 de julio de 2009 08:29, Juan Ernesto Hernández
<[email protected]>escribió:

>
> Hola Fabio
>
> Encontre el problema, como te decia yo usaba el Merge para atachar un
> objeto "Detached" de nuevo a la sesión.
> El problema estaba en que yo tenia implementado IUserCollectionType
> para mis colecciones y el método ReplaceElements de la siguiente forma
>
>        object IUserCollectionType.ReplaceElements(object original,
> object target, ICollectionPersister persister,
>            object owner, System.Collections.IDictionary copyCache,
> ISessionImplementor session)
>        {
>            ICollection<T> result = (ICollection<T>)target;
>            result.Clear();
>            foreach (object item in ((System.Collections.IEnumerable)
> original))
>            {
>                  result.Add((T)item);
>            }
>            return result;
>        }
>
> como saque de algunos forums:
>
> El problema esta en que en esa implementación no se tiene en cuenta el
> copyCache, cambiando la implementación para
>
>        object IUserCollectionType.ReplaceElements(object original,
> object target, ICollectionPersister persister,
>            object owner, System.Collections.IDictionary copyCache,
> ISessionImplementor session)
>        {
>            ICollection<T> result = (ICollection<T>)target;
>            result.Clear();
>            foreach (object item in ((System.Collections.IEnumerable)
> original))
>            {
>                if (copyCache.Contains(item))
>                    result.Add((T)copyCache[item]);
>                else
>                    result.Add((T)item);
>            }
>            return result;
>        }
>
> ya me funciona, sería bueno que hubiese alguna documentación de como
> implementar las interfaces de usuario para no cometer estos errores
> que le pueden costar a uno dias para darse cuenta.
>
> De todas formas gracias por tu ayuda.
> Juan Ernesto
>
> On 22 Jul, 19:43, Fabio Maulo <[email protected]> wrote:
> > a ver los mappings y lo que estas haciendo entre el openSession y el
> flush
> >
> > El 22 de julio de 2009 15:36, Juan Ernesto Hernández
> > <[email protected]>escribió:
> >
> >
> >
> >
> >
> >
> >
> > > Disculpa mi ignorancia, pero una cosa, no se supone que el Merge sirva
> > > para atachar un objeto previamente cargado en otra sesión de
> > > NHibernate.
> >
> > > A ver si me hago entender, yo no quiero mantener una sesión de
> > > NHibernate abierta duarante todo el tiempo que dure la conversación
> > > (Tiempo de sesión Http).
> > > Quiero crear una sesión al inicio de un request y destruirla al final,
> > > y quiero que algunos de los objetos se mantengan guardados (por ej. en
> > > la sessión Http o en cualquier otro lugar)
> > > para en el proximo request asociarlo a la nueva sesión y trabajar con
> > > ellos, por ej. acediendo a colecciones lazy etc. y decidiendo si los
> > > cambios son persistidos durante esa sesión o se mantienen pendientes
> > > para ser persistidos en otra sesión. Eso es posible?.
> >
> > > Saludos
> > > Juan Ernesto
> >
> > > On 22 Jul, 18:14, Fabio Maulo <[email protected]> wrote:
> > > > El 22 de julio de 2009 13:56, Juan Ernesto Hernández
> > > > <[email protected]>escribió:
> >
> > > > > No se si me explique bien, pero la idea era que la entidad servicio
> se
> > > > > guarda de un request para otro en el contexto de la sesion Http
> > > > > de forma tal que las modificaciones echas, es decir la adición de
> un
> > > > > departamento a la lista de departamentos se mantiene pendiente
> > > > > de aplicar a la BD
> >
> > > > Eso es justo lo que *no hay* que hacer usando session-per-request.
> > > > Como dije ante en session-per-request las instancias de las entidades
> > > mueren
> > > > al terminar el request (*no pueden quedar alive* en la HttpSession).
> >
> > > > DeepClone = genera nuevas instanciasShallowClone = copia las
> instancias.
> >
> > > > Igual tu problema no es ni el Clone ni el Merge; tu problema es que
> estas
> > > > mixando dos patrones session-per-conversation con session-per-request
> y
> > > eso
> > > > no te va a funcionar (seguro no funciona a largo plazo) ni si prendes
> una
> > > > vela a la virgen de Lujan.
> >
> > > > Ese mix es explosivo... empezarás a usar Evict, reattach, Flush en el
> > > medio
> > > > de un request... te lo digo porque es un "deja vú".
> > > > Si te parece que hay que insistir podes seguír, pero dormí
> preocupado.
> >
> > > > --
> > > > Fabio Maulo
> >
> > --
> > Fabio Maulo- Ocultar texto citado -
> >
> > - Mostrar texto citado -
> --~--~---------~--~----~------------~-------~--~----~
> 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

To unsubscribe, reply using "remove me" as the subject.

Responder a