Hola mouthbow,

Algo que ayuda mucho en las consultas es que nos cuentes como es tu modelo
(ademas de los mappings). Parece ser que tu enfoque esta muy orientado a la
base de datos, por ejemplo con tu entidad ViewListadoFacturas.

Es muy dificil entender (y mucho mas utilizar) un ORM si no dedicas un poco
de tiempo a pensar tu modelo. En general los ORMs funciona mucho mejor y es
mas facil usarlos, cuando tienes un modelo basados en objetos.

Una de las opciones que tienes para resolver este problema es que todos los
elementos que relacionas a tu coleccion implementen alguna interfaz o
tengan una clase base, lo cual es razonable en un modelo de objetos, caso
contrario, como podria manejarlos tu objeto si no tienen nada en comun?

Has pensado en eso?

----------------------------------
Carlos Peix

2012/10/8 mouthbow <[email protected]>

> Hola Marcos,
>
> Ante todo muchísimas gracias por tu respuesta.
>
> He revisado el código que me mandas y no termino de ver como sabe
> NHibernate la columna de origen con la que debe hacer el filtrado de la
> subcoleccion.
> Es decir, según esto:
>
>  <set name="NotasElementosList">
>       <key column="**CodigoElementoAsociado" />
>       <one-to-many class="NotasElementos" />
>     </set>
>
> Entiendo que ahí dice: defino una coleccion llamada NotasElementosList que
> se alimenta de la tabla NotasElementos, y debo filtrar en esa tabla por el
> campo CodigoElementoAsociado.
> Sin embargo no dice en ningún sitio: Al filtrar por la columna
> CodigoElementoAsociado debes utilizar el valor de la columna CodigoCliente
> (y no el id definido que es lo que supongo que haría, no?)
>
>  <set name="NotasElementosList">
>       <sourcekey column="**CodigoCliente" />
>       <key column="**CodigoElementoAsociado" />
>       <one-to-many class="NotasElementos" />
>     </set>
>
> ¿Esto es posible?
>
> Gracias de nuevo!
>
> El sábado, 6 de octubre de 2012 01:05:08 UTC+2, Marcos Mellibovsky
> escribió:
>
>> Hola mouthbow:
>>
>> Me parece que asi te deberia andar:
>>   <class name="ViewListadoFacturas">
>>     <id type="Guid">
>>       <generator class="guid" />
>>     </id>
>>     <property name="CodigoFactura" />
>>     <property name="CodigoCliente" />
>>     <set name="NotasElementosList">
>>       <key column="**CodigoElementoAsociado" />
>>       <one-to-many class="NotasElementos" />
>>     </set>
>>   </class>
>>
>>     public class ViewListadoFacturas
>>     {
>>         public virtual Guid CodigoFactura { get; set; }
>>
>>         public virtual Guid CodigoCliente { get; set; }
>>
>>         public virtual ISet<NotasElementos> NotasElementosList { get;
>> set; }
>>     }
>>
>>
>> El jueves, 4 de octubre de 2012 10:54:51 UTC-3, mouthbow escribió:
>>>
>>> Buenas tardes a tod@s!
>>>
>>> Tengo una pregunta que creo que lo mismo es básica pero no encuentro
>>> forma de hacer:
>>>
>>> Necesito definir un set en un archivo de mapping con unas necesidades
>>> especiales. He leído varias páginas pero no encuentro nada.
>>> Supongamos que tengo un mapping de una Vista SQL
>>>
>>>
>>> <class name="Namespace.**ViewListadoFacturas, Assembly"
>>> table="ViewListadoFacturas">
>>>
>>> <id name="CodigoFactura" column="[CodigoFactura]" type="System.Guid">
>>> <generator class="assigned"/>
>>> </id>
>>> <property name="CodigoCliente" column="[CodigoCliente]"
>>> access="field.pascalcase-**underscore" not-null="true"
>>> type="System.Guid"/>
>>>
>>> </class>
>>>
>>>
>>> Y supongamos que luego un mapping de una clase como este:
>>>
>>>
>>> <class name="Namespace.**NotasElementos, MyAssembly"
>>> table="NotasElementos" >
>>>
>>> <id name="Id" column="CodigoNota" type="System.Guid"><generator
>>> class="guid"/></id>
>>> <property name="CodigoElementoAsociado" column="**CodigoElementoAsociado"
>>> access="field.pascalcase-**underscore" not-null="false"
>>> type="System.Guid" insert="true" update="true"/>
>>>
>>> </class>
>>>
>>>
>>> Donde CodigoCliente de la Vista y CodigoElemento asociado guardan los
>>> mismos valores y por tanto podríamos hacer un inner join entre ellos pero
>>> se llaman diferente.
>>> El nombre es diferente porque en la clase NotasElementos también guardo
>>> Notas de Proveedores, Usuarios, etc... De ahí sale el concepto de
>>> CodigoElementoAsociado.
>>>
>>> Al usar Guids evito que dos elementos de clases diferentes compartan ids.
>>>
>>> La pregunta es:
>>>
>>> ¿Como puedo mapear las notas del cliente en la vista? Yo necesito hacer
>>> algo así:
>>>
>>>
>>>
>>> <set name="NotasElementosList" cascade="none" inverse="true" lazy="true"
>>> access="field.pascalcase-**underscore">
>>> <Source key>
>>> <column name="CodigoCliente" />
>>> </Source key>
>>> <Target key>
>>> <column name="CodigoElementoAsociado"/**>
>>> </Target key>
>>> <one-to-many class="MyNamespace.**NotasElementos, GIOFACT_DAL"/>
>>> </set>
>>>
>>>
>>> ¿Es posible hacer esto? La verdad es que esto solucionaría una gran
>>> parte de las necesidades que tengo pendientes.
>>>
>>> Ni que decir que agradezco enormemente por adelantado cualquier ayuda
>>> que pueda recibir.
>>>
>>> Un saludo.
>>>
>>  --
> 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