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