2011-06-01 21 views
15

Podemos dejar de creación de proxy en el constructor de contexto mediante el uso deEntidad Proxy Marco

this.Configuration.ProxyCreationEnabled = false; 

¿Cuáles son las ventajas y desventajas de crear proxies de EF 4.1?

Respuesta

16

La representación es necesaria por dos características:

  • Lazy carga - propiedades de navegación se cargan una vez que accede por primera vez
  • cambio de localización dinámica - si modifica cualquier propiedad en la entidad el contexto es notificado de este cambio y establecer el estado de la entidad. Si no se utiliza el seguimiento dinámico de cambios, el contexto debe usar el seguimiento de cambios de instantáneas, lo que significa descubrir todos los cambios antes de que se guarde el archivo = explorar todas las propiedades, incluso si no se han modificado.

Ambas técnicas tienen otros requisitos:

  • La carga diferida - todas las propiedades de navegación en la entidad deben ser virtual. La carga lenta debe estar habilitada.
  • Seguimiento de cambio dinámico: todas las propiedades mapeadas deben ser virtual.
+0

Hola, tengo una pregunta si pudiera ayudarme? ChangeTracker rastrea cualquier entidad que esté unida al contexto. Entonces, si cambio cualquier propiedad de una entidad, se marca como modificada. Entonces esto significa que se está rastreando de todos modos sin palabra clave virtual. ¿Cuál es la necesidad de establecer propiedades escalares virtuales, ya que el contexto ya las está siguiendo? Pero se dice que las propiedades escalares se marcan como virtuales para el seguimiento de cambios. ¿Qué cambio de seguimiento afecta la palabra clave virtual en las propiedades escalares que no mencioné? – UfukSURMEN

+1

@UfukSURMEN Existen diferentes tipos de seguimiento de cambios en juego, que Ladislav menciona en su respuesta. Las propiedades 'virtuales' permiten el seguimiento dinámico, que se nota cada vez que se modifica una propiedad. Sin la palabra clave 'virtual', se usa el seguimiento de instantáneas que compara los valores de cada propiedad con sus valores previos en' DetectChanges() '. Cuál debería usar es una [pregunta con matices] (https://blog.oneunicorn.com/2011/12/05/should-you-use-entity-framework-change-tracking-proxies/). –

+0

@BobSammers gracias por su respuesta, y muy buen artículo sobre este tema. – UfukSURMEN

2

Además de la respuesta anterior, en tiempo de ejecución utilicen la clase POCO utilizando la reflexión y crear una clase de proxy dinámico que hereda la clase POCO. Por lo tanto, agregará esas funcionalidades + funcionalidades de EntityObject en tiempo de ejecución que ayudarán a los proxys dinámicos a habilitar la carga diferida y el seguimiento de cambios dinámicos.

Cuestiones relacionadas