Modelo de presentación de servicios de RIA con relaciones 1-muchos o muchas de muchas cosas

StackOverflow https://stackoverflow.com/questions/2152623

Pregunta

Estoy tratando de obtener un modelo de presentación (discutido aquí y aquí) Trabajando en RIA. Todos los ejemplos que puedo encontrar son entidades de datos simples y planas con relaciones con no 1-muchos o muchas muchas relaciones, que son lo que no puedo trabajar, específicamente, en actualizaciones e insertos en relaciones asociativas.

Consultas que puedo trabajar bien: tengo mis clases de presentación marcadas con atributos de asociación (e incluir atributos, cuando sea apropiado), y tengo una buena comprensión sobre cómo los datos se cargan en el lado del cliente y se mantienen allí como entidades. También tengo insertos de nuevas entidades cubiertas. Sin embargo, estoy experimentando los siguientes problemas. Para los siguientes ejemplos, suponga que tenemos entidades simples de álbumes y artistas, donde un álbum tiene un artista y un artista puede tener cero para muchos álbumes. Ambos tienen una propiedad de nombre.

  • En el lado del cliente, si hago myartist.albums.add (analbum) o myartist.albums.remove (analbum), no sucede nada. Los haschanges devuelven falso. (Tenga en cuenta que Myartist y Analbum se obtuvieron únicamente en el código cargando las entidades y iterando para obtener referencias a entidades específicas: todavía no estoy haciendo nada en la interfaz de usuario o con dominiources, solo corriendo).
  • Si actualizo el nombre en un artista y submitchanges, cuando se llama al método de actualización en el servidor, la colección de álbumes es nula.

¿Alguien tiene alguna sugerencia o puede señalarme un ejemplo que use objetos más complejos?

EDITAR (Manteniendo lo anterior para la posteridad): está bien, parece que el segundo problema (una referencia a una entidad o una colección de entidades que se muestran como nulas cuando la actualización se llama en el servidor) existe porque el niño entra no está marcado como cambiado y cambiado Por lo tanto, no están siendo serializados y enviados de regreso. Sé que puedes forzar que eso suceda usando [composición] y lo he hecho funcionar de esa manera, pero esta no es una relación compositiva y quiero que ambas entidades sean entidades "de alto nivel". ¿Cómo puedo marcar una entidad como se cambió?

¿Fue útil?

Solución

El problema era que mis atributos [asociación] no estaban definidos correctamente. No me di cuenta de que la propiedad de nombre de la asociación tiene que ser la misma en ambos lados de la asociación. Cuando los nombres son los mismos y usted hace una compilación, el código generado en el cliente usa un constructor diferente para la EntityCollection utilizada por el "padre" para referirse a los "hijos" que si las asociaciones no están configuradas correctamente . El nuevo constructor toma devoluciones de llamada que hacen un poco de manejo adicional cuando llama a Agregar y elimina la colección; específicamente, toman la entidad infantil que está agregando o elimina y modifica la propiedad que se refiere a su padre para que todo permanezca En sincronización: la colección de la que eliminó el objeto, la colección a la que lo agregó y la referencia del objeto a su padre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top