La idea general del repositorio está bien, pero el manejo de sesiones (tal como lo plantea el artículo) no, y menos para una aplicación de escritorio.
Conversation-per-Business-Transaction está implementado de forma interesante en uNhAddIns; sinó tenés un patrón algo más sencillo y acoplado (no me acuerdo cómo lo llama Oren, pero digámosle Session-per-ViewModel) en Effectus. Diego 2010/6/28 Carlos Cocom <[email protected]> > 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 > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
