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.
