Bernardo,

A simple vista no es un error de mapping sino que seguramente una vez que
levantas la Categoría estás cerrando la sesión y retornando el objeto para
mostrarlo en la UI, entonces cuando dsd la UI intentas acceder a alguna
SubCategoría es que da el error. Para que el lazy funcione la sesión se
debe mantener abierta.

GF

El 25 de octubre de 2012 08:54, Bernardo Budnik
<[email protected]>escribió:

> Buenas, tengo algunas inconvenientes con las sesiones y el lazy load en
> una aplicacion winForn en vs2012express, nHibernate 3.3 y SQLCompact
> Edition.
>
> Cree 2 clases sencillas, "Categoria" y "SubCategoria", Categoria tiene una
> lista de SubCategorias, cuando busco una instancia de Categoria, trae sin
> problemas, pero cuando quiero acceder a la lista de SubCategorias de la
> instancia me da el siguiente error: "*Información adicional:
> Initializing[MiniVentasClass.Entities.Categoria#1]-failed to lazily
> initialize a collection of role:
> MiniVentasClass.Entities.Categoria.Subcategorias, no session or session was
> closed*"
>
> *Definición de Clases:*
>
>     public class Categoria
>     {
>         public virtual Single Id {get;set;}
>         public virtual string Descripcion { get; set; }
>         public virtual IList<SubCategoria> Subcategorias { get; set; }
>     }
>
>     public class SubCategoria
>     {
>         public virtual Single Id { get; set; }
>         public virtual Categoria Categoria { get; set; }
>         public virtual string Descripcion { get; set; }
>     }
>
> *Así manejo la sesión:*
>
>     public class nHibernateManager
>     {
>         private static ISessionFactory _sessionFactory;
>
>         private static ISessionFactory SessionFactory
>         {
>             get
>             {
>                 if(_sessionFactory == null)
>                 {
>                     var configuration = new Configuration();
>                     configuration.Configure("Config.xml");
>                     configuration.AddAssembly("MiniVentasClass");
>
>                     _sessionFactory = configuration.BuildSessionFactory();
>                 }
>
>                 return _sessionFactory;
>             }
>         }
>
>         public static ISession OpenSession()
>         {
>             return SessionFactory.OpenSession();
>         }
>     }
>
> *El mapeo:*
>
> *Categoria*
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>                    assembly="MiniVentasClass"
>                    namespace="MiniVentasClass.Entities"
>                    default-lazy="true">
>   <class name="Categoria">
>     <id name="Id" type="int" unsaved-value="0" generator="native"/>
>     <property name="Descripcion" type="string" length="30"/>
>     <bag name="Subcategorias">
>       <key column="IdCategoria"/>
>       <one-to-many class="SubCategoria"/>
>     </bag>
>   </class>
> </hibernate-mapping>
>
> *SubCategoria*
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>                    assembly="MiniVentasClass"
>                    namespace="MiniVentasClass.Entities"
>                    default-lazy="true">
>   <class name="SubCategoria">
>     <id name="Id" type="int" unsaved-value="0" generator="native"/>
>     <many-to-one name="Categoria" class="Categoria" column="IdCategoria"/>
>     <property name="Descripcion" type="string" length="30"/>
>   </class>
> </hibernate-mapping>
>
> Les agradecería me den una mano, hace poco empece con nHibernate y no se
> como solucionarlo.
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano




-- 
{
   me: 'Gustavo Fuentes',
   mobile: '+54 9 11 69674021'
}

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