Hi, el hecho de que NHibernate te permite asociar una coleccion de elementos
y mapearla de modo que podes obtenerla haciendo maquina.Articulos o lo que
sea, no quiere decir que sea una buena practica.
Hace un tiempo Fabio recomendo no poner nunca un mapping de coleccion con
lazy=true si no lo usarias en el caso de lazy=false...y es la mejor
recomendacion que puedo dar.
Si lo que necesitas es de vez en cuando todos los articulos de una maquina o
ciertos articulos mapeas maquina por un lado , articulo cpor otro con many
to one y haces from Articulo articulo where articulo.Maquina ... y
demas condiciones que quieras poner , de este modo obtenes los articulos que
necesitas y no todo articulo asociado a la maquina.

Hay que tener claro que la herramienta permite hacer muchas cosas, pero eso
no quiere decir que todo sean best practices, como toda herramienta hay que
tratar de entender cuando usar que cosa...

Espero haber ayudado a aclarar.
2008/6/20 crodme <[EMAIL PROTECTED]>:

>
> Saludos y gracias por responder Fabio Maulo.
>
> He cambiado el mapping como me dijiste y la verdad es que así queda
> mucho más claro, agradezco mucho el consejo.
>
> Por otra parte creo que mi problema era exactamente lo que has
> comentado, que miraba si la coleción estaba cargada con el debug y que
> al situarme encima de ella se cargaba.
>
> Hasta ahora no había utilizado el SchemaExport, pero ahora me estoy
> "pegando" con él y con log4net como me dijiste porque parece que son
> de gran utilidad cuando se utiliza NH, así que de nuevo gracias por el
> consejo.
>
> Todo esto de que se cargue toda la colección a la hora de acceder a
> ella me plantea la pregunta de si no es posible cargar sólo parte de
> la colección, porque a la hora de buscar si un día es hábil o no, me
> parece un poco ineficiente tener que buscar en toda la colección si sé
> que sólo voy a trabajar con un determinado rango de fechas.
> Este problema se me presenta también en otras clases como una de
> Maquina -> Articulo (artículos que puede producir una máquina), en
> donde tener cargados todos los artículos que puede producir me podría
> resultar muy ineficiente ya que se realizan multitud de cálculos para
> balances de carga, suministros y demás y realmente sólo necesito tener
> "cargados" en la colección un número reducido de todos los artículos
> que puede producir una máquina.
>
>
> Un saludo y muchas gracias.
>
>
> On 20 jun, 01:22, "Fabio Maulo" <[EMAIL PROTECTED]> wrote:
> > Primero arrancamos con escribir el mapping de forma menos engorrosa...
> >     <class name="Calendario">
> >         <id name="IdCalendario">
> >             <generator class="identity" />
> >         </id>
> >
> >         <property name="Nombre" length="100" not-null="true"
> unique="true"/>
> >         <bag name="LineasCalendario" inverse="true"
> > cascade="all-delete-orphan">
> >             <key column="idCalendario"/>
> >             <one-to-many class="LineaCalendario" />
> >         </bag>
> >     </class>
> >
> >     <class name="LineaCalendario">
> >         <id name="IdLineaCalendario">
> >             <generator class="identity" />
> >         </id>
> >
> >         <property name="Fecha"/>
> >         <property name="EsHabil" not-null="true"/>
> >         <many-to-one name="Calendario" column="idCalendario"
> not-null="true"
> > />
> >     </class>
> >
> > Con el tiempo me di cuenta que "hacer tabajar menos" a NH no es siempre
> > aconsejable... cuando se empieza con NH vale mas el:
> > "no aclares que oscurece".
> >
> > La collection se inicializa solo si por algún motivo estas accediendo a
> > ella, lo cual incluye tener mal algún tipo en la clase LineaCalendario y
> > hacer que NH considere un elemento como modificado y prepare la
> collection
> > para su actualización.
> >
> > Usando ese mapping crea la base con NH (new
> SchemaExport(cfg).Create(false,
> > true)) y fijate si hay diferencia con lo que creaste.
> >
> > Ojo a estar seguro que no estas accediendo a ningún metodo de la
> collection
> > y a no tener en cuenta el Debug porque si usas el Debug NH sigue
> funcionando
> > abajo y ni bien pongas el cursos, arriba la variable, el debug le pide a
> NH
> > que inicialize la collection.
> > Hay una forma para verificar que la collection no se inicialize pero no
> hace
> > falta que lo verifique.
> > Por ahora podes limitarte en activar log4net para verificar los SQL que
> NH
> > ejecuta y cuando los ejecuta.
> > --
> > Fabio Maulo
> >
>

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