2010-02-26 19 views
12

El año pasado desarrollé un servicio de acceso a datos para nuestro proyecto usando Entity Framework (.NET3.5 por supuesto) y usando el libro de Julie Lerhman como guía desarrollada por POCO. Usamos WCF y también tenemos clientes de Silverlight 3. Nos estamos moviendo a .NET 4.0 y quiero pasar a utilizar la generación de código para eliminar el tiempo desperdiciado de desarrollador escribiendo las clases de POCO y las clases de traducción.EF4 POCO: instantánea vs auto-seguimiento sobre WCF

Con la investigación que he hecho parece que hay 3 formas de Pocos de seguimiento de estado:

1) cambió rastreado proxies: No parece ser útil para nosotros, ya que parece que esto no funciona a través de WCF publicación por entregas.

2) Basado en una instantánea: se toma una instantánea cuando se recupera el gráfico de la entidad POCO, el gráfico devuelto del cliente se compara con esa instantánea y se comparan las diferencias ... me parece bien.

3) Entidades de seguimiento automático: el generador de código genera la lógica para realizar un seguimiento automático dentro de los objetos POCO. Esto parece cercano a lo que hacemos ahora, excepto que todo está generado para nosotros.

Estoy tratando de averiguar cuáles son las ventajas y desventajas entre todos estos métodos. Supongo que 1 y 2 están "conectados" y que necesitan el ObjectContext para que las POCO se hayan consultado originalmente para permanecer instanciadas, pero no han podido confirmarlo. Tampoco veo una razón por la que alguien realmente se moleste con la opción 1 dado que la opción 3 parece hacer lo mismo y más ...

La instantánea me parece la más simple, pero si esto requiere que un ObjectContext permanezca abierto durante mucho tiempo no estoy tan seguro ...

Solo soy un programador junior así que cualquier consejo aquí, especialmente con respecto a Silverlight 3 (creo que las opciones 2 y 3 funcionan con Silverlight 3 pero 2 pueden tener problemas) es muy apreciado

+0

Como una actualización, ahora estoy usando State Tracked Entities en nuestra aplicación WCF/Silverlight 4 y funcionan bastante bien (aunque tienen problemas con las eliminaciones). Las Propiedades de navegación son TrackableCollections ahora que derivan de ObservableCollection por lo que son vinculantes para XAML en un sueño. Recomiendo mucho esta solución. – MrLane

+0

Posible duplicado de http://stackoverflow.com/questions/3814706/self-tracking-entities-vs-poco -entities y de http://stackoverflow.com/questions/6116002/entity-framework-self-tracking-entities -vs-poco –

Respuesta

14

Vaya con la opción 3. Entidades de seguimiento automático, ya que esto es para lo que fueron diseñadas.

"Entidades de seguimiento están optimizados para escenarios de serialización"

This post da una buena demostración.

+10

Self-Tracking-Entities (STE) tiene un inconveniente importante. Debe compartir el código generado por el generador de código T4 para que el STE funcione correctamente. Esto significa que no puede usar las clases generadas de metadatos de referencia del servicio de datos en el lado del cliente, por lo tanto, una limitación para el lado del cliente .NET solamente. –

+0

Sí, tiene razón acerca de no poder generar proxies de cliente. Codificamos nuestros proxies a mano y compartimos el código en el cliente. Técnicamente, puedes compartir los binarios que contienen las entidades con tu cliente .NET o Silverlight (tienes que crear un .dll compatible con Silverlight si tu cliente es Silverlight). – MrLane

+0

ya no. STE ya no se recomienda. – DarthVader

2

Las otras dos opciones solo son aplicables cuando se realizan cambios cuando el objeto se encuentra alrededor. Tu única opción es STE. Con STE, las entidades mantendrían un registro de sus propios cambios. Cuando el gráfico de objeto modificado se envía al servidor, puede reproducir esos cambios como se muestra a continuación. db.Dustomers.ApplyChanges (cliente); db.SaveChnages();

Con STE, puede crear sus entiites en un proyecto de biblioteca de clase y compartirlas entre un cliente WCF, cliente silverlight, asp.net y wpf. Esto le permite reutilizar entidades para varios clientes.

Cuestiones relacionadas