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

Responder a