EF4: el uso de Agregar referencia de servicio causa problemas con STE (entidades de seguimiento automático) ¿No recuerda los cambios?

Encontré un problema, pero se refiere a la versión BETA de VS 2010. ¿Estoy interesado en saber si este problema se ha solucionado en RTM?

Básicamente dice (lo vi a través de EF 4 Self Tracking Entities no funciona como se esperaba )

Asegúrese de reutilizar el código de entidad generado por la plantilla de entidad de seguimiento automático en su cliente. Si usa código proxy generado por Agregar referencia de servicio en Visual Studio o alguna otra herramienta, las cosas se ven bien en su mayor parte, pero descubrirá que las entidades en realidad no realizan un seguimiento de sus cambios en el cliente.

Estoy muy acostumbrado a usar Agregar referencia de servicio, y siempre me funcionó muy bien en el pasado, pero, por supuesto, no estaba usando STE (entidades de seguimiento automático). ¿Sigue apareciendo este problema con VS 2010 RTM y la plantilla STE?

Si creo el proxy a través del código en lugar de agregar el servicio, entonces no se crearán todas las clases, ¿verdad?

Cualquier ayuda o conocimiento realmente apreciado

preguntado el 09 de enero de 11 a las 10:01

1 Respuestas

Esto no es un problema y nunca lo fue. Es un comportamiento absolutamente esperado y correcto. Los STEs son clases que contienen datos y lógica (la lógica rastrea los cambios).

Al agregar una referencia de servicio, el código de proxy de su cliente se genera a partir de los metadatos del servicio. Los metadatos se exponen en formato WSDL. WSDL es una descripción del servicio basada en XML que también contiene una descripción XSD de los tipos de datos transferidos. XSD solo puede describir el formato de datos, pero no la lógica relacionada implementada por el tipo. De forma predeterminada, todos los tipos de datos desconocidos descritos en WSDL se generan en el cliente. Entonces, cuando genera un proxy de cliente con todos los tipos de datos mediante Agregar referencia de servicio, la lógica de seguimiento se pierde.

Para superar este problema, debe hacer dos cosas:

  • Cree un conjunto separado y coloque todos sus STEs en este conjunto. Luego, comparta este ensamblaje entre todas las capas involucradas (sí, debe usar Agregar referencia en su cliente).
  • Luego, puede usar Agregar referencia de servicio con la opción "Reutilizar tipos en ensamblajes referenciados" marcada.

Respondido el 09 de enero de 11 a las 18:01

Gracias Ladislav, implementar mis tipos (ste) en un ensamblado externo es lo que quería hacer de todos modos, así que esto es una ventaja para mí. Supongo que la magia es cuando se usa la referencia Agregar servicio: la opción Reutilizar tipos en ensamblados referenciados es lo que permite que las cosas funcionen. ¿Puede explicar cuál es la diferencia entre esto y simplemente hacer una referencia de servicio Agregar? Gracias una vez más. - Martin

Al usar simplemente agregar referencia de servicio sin reutilizar sus tipos, el generador crea nuevos tipos en su aplicación cliente. Estos tipos no contienen lógica de seguimiento STE. - Ladislav Mrnka

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.