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