Carlos,

Dejo comento un poco y explico brevemente la problemática en si para los 
que encuentre con el problema:

Síntomas:

   - Necesitas serializar para que tu WS, WCF o RESTful se pueda comunicar 
   con tu sistema externo y sea generado desde las entidades mapeadas por 
   NHibernate.
   - Queres serializar, a algun formato, tus modelos de dominio y hacer 
   luego trabajo de Exportacion/Importacion;
   - No podes serializar las entidades de dominio por que las colecciones 
   por que son proxies.

El problema.

   - Cualquier serializador te exige que uses colecciones de clases 
   concretas.
   - NHiberante no permite colecciones de clases concretas.
   - Cuando el serializador lee una colección, da como resultado que no 
   tiene ningún elemento o no esta inicializada.

Posibles *walk-arounds (Magia negra)*:

   - Surrogar(delegar la responsabilidad) propiedades donde están las 
   colecciones que son interfaces a nuevas propiedades, y no mapear estas 
   propiedades surrogadas. Luego de esto, desproxificar estos modelos.
   - Hacer algo parecido al DataContractResolver cuando usas WCF.

Solución:

   - Usa DTOs (*ponele*) con AutoMapper y serializa estos DTOs. Casi todos 
   los recomiendan, La idea es aislar tu dominio de los proxies y colecciones 
   de clases no concretas.

Mi sugerencia y visión sobre el problema:

   - Si tenes este problema, de preferencia, buscaría una solución 
   alternativa. Esto te puede ensuciar la arquitectura/diseño del sistema. Te 
   puede dar muchos dolores de cabeza.
   - Si vas a caer en los DTOs, prefiriera aíslar los modelos del dominio y 
   mapear los DTOs para luego transferir el estado de los DTOs a los modelos 
   del dominio a la hora de obtener y viceversa a la hora de persistir. 
   Advierto que faltaría alguna mecanismo de seguimientos de cambios en caso 
   de que borren elementos en las listas de algunas de las entidades.

Saludos!

El jueves, 7 de mayo de 2015, 17:15:13 (UTC-3), Carlos Peix escribió:
>
> Si podes conta brevemente como hiciste por si alguien más se encuentra con 
> ese problema.
>
> Un saludo
>
> On Thu, May 7, 2015, 4:20 PM Pablo Leiros <[email protected] <javascript:>> 
> wrote:
>
>> Carlos,
>>
>> Gracias, al final. Tenes razón. No tiene sentido pelear para unificar los 
>> modelos. Lo mejor que se puede hacer es lo que vos decís: mapear el dominio 
>> a DTOs.
>> Al final, no opte por serializar sino por cambiar el tipo de base de 
>> datos para hacerlo portable.
>>
>> Gracias!
>>
>>
>> El domingo, 3 de mayo de 2015, 18:31:52 (UTC-3), Carlos Peix escribió:
>>
>>> Pablo,
>>>
>>> Yo buscaría la manera de tener dos modelos separados y que no sea 
>>> engorroso mapear de uno a otro. Esta terquedad puede deberse a una bias 
>>> profesional, superstición, genética o malas experiencias. A mi me ha pasado 
>>> tener que resolver problemas de los dos mundos (serialización y 
>>> persistencia) y encontrar muchos conflictos entre soluciones óptimas para 
>>> cada campo.
>>>
>>> Aquí 
>>> <http://rogeralsing.com/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and-entityframework-is-horrible/>,
>>>  
>>> aquí 
>>> <http://stackoverflow.com/questions/678217/best-practices-for-mapping-dto-to-domain-object>
>>>  
>>> y aquí 
>>> <http://stackoverflow.com/questions/9770041/dto-to-entity-mapping-tool> 
>>> (tres 
>>> primeras entradas en esta búsqueda 
>>> <https://www.google.com.ar/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=dto%20mapper>)
>>>  
>>> encontrarás comentarios y código sobre el problema que estás enfrentando. 
>>> Ninguno es una solución para tu caso, solo pistas para que investigues.
>>>
>>> Éxitos!
>>>
>>
>>> ----------------------------------
>>> Carlos Peix
>>>
>>> 2015-05-02 22:15 GMT-03:00 Pablo Leiros <[email protected]>:
>>>
>>>> Carlos, gracias por tu respuesta.
>>>>
>>>> En verdad, lo que planteas es correcto. Pero, cuando se midió el 
>>>> alcance de la solución no se planteo la interacción con sistemas externos. 
>>>> Aunque, admito, que el alcance del solución tambien es medio difuso. Se 
>>>> que 
>>>> a MUY LEJANO futuro puede que llegara consumir servicios web, pero cuando 
>>>> te digo esto me refiero de acá a 3 años posiblemente.
>>>> En principio, el requerimiento es exportar los datos del sistema y 
>>>> luego importarlos a otro lugar, ya que no existe la posibilidad de 
>>>> centralizar la base de datos y los equipos que utilizan el sistema no 
>>>> están 
>>>> en conectados. Para contextuarlizarlo mas, es para una escuela primaria 
>>>> del 
>>>> estado, donde las limitaciones de ambiente, me hace recaer en estas 
>>>> soluciones.
>>>> Por eso pensé en serializacion XML. Se me cruzo en hacer scripts de 
>>>> migración SQL pero eso significaría que, a la hora de sincronizar los 
>>>> datos, tendría que hacer una persona con conocimientos en base de datos 
>>>> para realizar dicha tarea.
>>>>
>>>> Si tenes alguna solución o propuesta alternativa, soy todo oídos.
>>>>
>>>  -- 
>>>> -- 
>>>> Para escribir al Grupo, hágalo a esta dirección: 
>>>> [email protected]
>>>>
>>>
>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>> --- 
>>>> Has recibido este mensaje porque estás suscrito al grupo 
>>>> "NHibernate-Hispano" de Grupos de Google.
>>>> Para anular la suscripción a este grupo y dejar de recibir sus 
>>>> mensajes, envía un correo electrónico a 
>>>> [email protected].
>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>
>>>  -- 
>> -- 
>> Para escribir al Grupo, hágalo a esta dirección: 
>> [email protected] <javascript:>
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> --- 
>> Has recibido este mensaje porque estás suscrito al grupo 
>> "NHibernate-Hispano" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, 
>> envía un correo electrónico a 
>> [email protected] <javascript:>.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a [email protected].
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a