Je, Carlos me ganaste de mano. Raul el patron de session que usas, espero
que solo sea para un test en una aplicacion production te va a complicar la
vida. Si queres fiajte los ejemplos de session management en uNHAddins ya
son bastante mas acercados a lo que se tiene que usar en produccion.

Cambie el codigo que recibi de Raul a esto y funciona bien:

            using (ITransaction tx = _session.BeginTransaction())
            {
                // obtiene todo
                _parents =
_session.CreateCriteria(typeof(Parent)).List<Parent>();
                // borra coleccion
                foreach (Parent p in _parents)
                {
                    p.Children.Clear();
                }

                // agrega un child valor 500 a cada parent
                foreach (Parent p in _parents)
                {
                    Child c = new Child();
                    c.Valor = 500;

                    p.AddChild(c);
                }

                // esto me genera un solo child colgado del ultimo parent
                tx.Commit();
            }



On Mon, Jan 12, 2009 at 2:39 PM, Carlos Peix <[email protected]> wrote:

>
> Hola Raul,
>
> Hay varias cosas en tu ejemplo que no estan bien, no se si porque lo
> copiaste incorrectamente al mail o porque estan definitivamente mal. Te
> pido
> que reescribas tu codigo de esta manera (y que cambies lo que corresponda
> siempre y cuando entiendas los motivos). Estos son los puntos que no me
> cierran
>
> - No queda claro el scope de la variable _session.
> - Estas agregando LA MISMA INSTANCIA de chuild a todos los parents, me
> parece que eso no es lo que queres hacer.
> - Veo una propiedad Parent en el child que no estas seteando en el codigo
> que enviaste.
> - Estas haciendo un update con cada parent, esto no seria necesaro, incluso
> no es necesario hacer ninguno con la opcion de cascade que tenes.
>
> // Aca achicas mucho mas el scope de session, el metodo
> // CreateSession() depende de cómo manejes e sessionFactory
> // pero deberia ser una sesion nueva puesto que estas haciendo
> // el Dispose al salir del using(), esa sesion no servira para
> // nada mas.
> using ( ISession s = CreateSession() )
> using ( ITransaction tx = s.BeginTransaction() )
> {
>        _parents =  s.CreateCriteria(typeof(Parent)).List<Parent>();
>
>        foreach(Parent p in _parents) {
>                p.Children.Clear();
>
>                 // DIFERENCIA con tu codigo, creo una instancia para cada
> parent
>                // y proponto una alternatia para setear la propiedad patent
> en
>                // child, aunque me gustaria mas asi: p.AddChild( 500 ) y
> que el
>                // parent haga el new Child( this ); y luego setee el Valor.
>                Child c = new Child( p );
>                c.Valor = 500;
>                p.AddChild( c );
>
>                // Entiendo que esta linea es prescindible
>                s.Update(p);
>        }
>
>        tx.Commit();
> }
>
>
> Carlos Peix
>
> -----Mensaje original-----
> De: [email protected]
> [mailto:[email protected]] En nombre de Raul Lopez
> Enviado el: Lunes, 12 de Enero de 2009 08:16 a.m.
> Para: [email protected]
> Asunto: [NHibernate-Hispano] ayuda con coleccion
>
>
> Hola, por favor si me pueden dar una mano con esto.
> La idea es borrar la coleccion en el child y sustituirla con una nueva pero
> hay algo mal y no me doy cuenta.
> Lo que esta haciendo es generar un solo registro colgado del ultimo parent.
>
> _parents =  _session.CreateCriteria(typeof(Parent)).List<Parent>();
>
> foreach(Parent p in _parents) {
>
>        p.Children.Clear();
>
> }
>
>
>
> Child c = new Child();
>
> c.Valor = 500;
>
> // agrega un child valor 500 a cada parent
>
> foreach(Parent p in _parents) {
>
>        p.AddChild(c);
>
>        _session.Update(p);
>
> }
>
> _session.BeginTransaction().Commit();
>
>
>
>
>
>
>
> del mapeo del parent
> ...
>
> <bag name="Children" inverse="true" cascade="all-delete-orphan">
>
>                        <key column="parent_id"/>
>
>                        <one-to-many class="Child"/>
>
> </bag>
> ...
>
>
>
> del mapeo del child
>
>
> ...
> <many-to-one name="Parent" column="parent_id" /> ...
>
> Desde ya muchas gracias.
>
> Saludos,
> Raul
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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