Hola Edgar la idea es utilizarlo en un aplicación de escritorio. Diego la idea general la tome de aquí http://docs.google.com/Doc?docid=0AUP-rKyyUMKhZGczejdxeHZfMTVjMnBqYjVnNw&hl=en
<http://docs.google.com/Doc?docid=0AUP-rKyyUMKhZGczejdxeHZfMTVjMnBqYjVnNw&hl=en>Sobre utilizar una contexto tipo sesión por conversación no sabia. Voy a investigar sobre el tema, gracias por tip. Y no te rías de mi código :D un saludo El 28 de junio de 2010 10:38, Edgar Ramos <[email protected]> escribió: > Y para que tipo de aplicacion usas este codigo, escritorio, web ? > > El día 28 de junio de 2010 10:30, Diego Mijelshon > <[email protected]> escribió: > > Tenés un problema fundamental en tu implementación, y es que el scope de > la > > session no se corresponde con el uso. > > La solución que elegiste (indicarle al repositorio desde una capa > superior > > que debe hacer un load explicito) no hace más que complicarlo. > > Deberías utilizar un contexto de sesión más apropiado, en el cual la > misma > > esté "viva" durante toda la conversación. > > > > Diego > > > > > > 2010/6/28 Carlos Cocom <[email protected]> > >> > >> Un saludo gente del foro > >> Trabajando con asociaciones me surgió un duda y es que tengo > dos entidades > >> Equipo y la de Nota. > >> En mi repository den Equipo tengo en el metodo GetById > >> public Equipo GetById(Int32? id) > >> { > >> using (var session = GetSession()) > >> { > >> var equipo = session.Get<Equipo>(id); > >> return equipo; > >> } > >> } > >> la forma en que lo utilizo es > >> public static void RecuperarEquipo() > >> { > >> var aRep = new EquipoRepository(); > >> var equipo = aRep.GetById(6); > >> equipo .Descripcion = "Ya cambie2"; > >> if (equipo.Notas.Count == 0) > >> { > >> System.Console.WriteLine("Sin Notas"); > >> } > >> equipo.Save(thard); > >> } > >> Al recuperar equipo es necesario que yo le agregue que inialize > >> mi colección de notas ya que si no devuelve el error de que > >> Initializing[MyHardware.Model.Entities.Equipo#6]-failed to lazily > >> initialize a collection of role: MyHardware.Model.Entities.Equipo.Notas, > no > >> session or session was closed > >> Una primera idea para resolver este comportamiento fue agregarle al > metodo > >> get una dictionary switch para indicarle si debe o no cargar > >> cierta asociación > >> public Equipo GetById(Int32? id, Dictionary<string, bool> > >> swLoadLazy) > >> { > >> using (var session = GetSession()) > >> { > >> var thar = session.Get<Equipo>(id); > >> if ( swLoadLazy != null ) > >> { > >> if (swLoadLazy["colNotas"] == true) > >> { > >> NHibernateUtil.Initialize(thar.Notas); > >> } > >> return thar; > >> } > >> } > >> } > >> ahora al recuperar la entidad hago lo siguiente > >> public static void RecuperarEquipo() > >> { > >> var aRep = new EquipoRepository(); > >> var diccionario = new Dictionary<String, Boolean> > >> {{"colNotas", true}}; > >> var thard = aRep.GetById(6, diccionario); > >> thard.Descripcion = "Ya cambie2"; > >> if (thard.Notas.Count == 0) > >> { > >> System.Console.WriteLine("Sin Notas"); > >> } > >> aRep.Save(thard); > >> } > >> > >> Mi pregunta en su experiencia como debería manejar la interacciones con > >> coleccion de entidades? > >> Nota: > >> Se que puedo ponerle en el mapping lazy = "false" pero me parece que > este > >> comportamiento es fundamental para el performance. > >> > >> Hasta pronto. Si puedan dejen una comentario > >> > >> -- > >> 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 > > -- > 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
