Gustavo gracias, probe el codigo del post de Carlos y funciona.
En realidad el tema de las sesiones ya me esta complicando en el programa real, 
voy a ver lo de uNHAddins a ver si aclaro el panorama.

Saludos y gracias por todo.
Raul.

Gustavo Ringel escribió:
> 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] 
> <mailto:[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]>
>     [mailto:[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]
>     <mailto:[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