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

Responder a