Realizar el seguimiento de los cambios en entidades POCO (Entity Framework)

Existen dos maneras de hacer el seguimiento de cambios en entidades POCO (objetos CLR "antiguos"): a través de un objeto proxy de seguimiento de cambios o a través de una instantánea.

Seguimiento de cambios con proxies

Cuando la creación de objetos proxy de seguimiento de cambios se habilitada para entidades POCO, Entity Framework realiza automáticamente el seguimiento de los cambios que se realizan en el gráfico de objetos a medida que se producen. Para obtener más información, vea Requisitos para crear objetos proxy POCO (Entity Framework) y Resolución de identidades, administración de estados y seguimiento de cambios (Entity Framework). Si no puede cumplir los requisitos adicionales en sus clases POCO o si no desea materializar estos objetos proxy, puede deshabilitar la generación de clases proxy. Para obtener más información, vea Trabajar con entidades POCO (Entity Framework).

Seguimiento de cambios utilizando una instantánea

Cuando la creación de objetos proxy está deshabilitada, Entity Framework no realiza automáticamente el seguimiento de los cambios en el grafo de objetos a medida que se producen. Deberá utilizar en su lugar el método DetectChanges para notificar los cambios.

Cuando un objeto está adjunto al contexto, se toma una instantánea de sus valores de propiedad. Cuando se llama al método DetectChanges, el gráfico de objetos adjuntos se sincroniza con el ObjectStateManager. Para obtener más información acerca de cómo adjuntar objetos, vea Asociar y desasociar objetos (Entity Framework). El método DetectChanges sincroniza el grafo de objetos con el administrador de estados mediante las siguientes acciones:

  1. Adjunta los nuevos objetos del gráfico al contexto de objetos. Esto puede ocurrir si realiza una consulta para un objeto principal y crea una asociación con un nuevo objeto dependiente.

  2. Actualiza el estado de los objetos comparando los valores de propiedad actuales con la instantánea de los valores originales (si ya se tomó esa instantánea).

Para obtener más información, vea Cómo: Detectar cambios en entidades POCO.

Dd456848.note(es-es,VS.100).gifNota:
Si una entidad POCO contiene una propiedad de tipo complejo, los cambios en los miembros de la instancia del tipo complejo se detectarán a través del método de la instantánea aunque la entidad posea un proxy de seguimiento de cambios.Sin embargo, si una nueva instancia del tipo complejo se asigna a una propiedad, el seguimiento de cambios de la propiedad se realizará de la misma manera que para otras propiedades.

Cuando los objetos y ObjectStateManager no están sincronizados, otras operaciones que utilizan el ObjectStateManager, tales como agregar, adjuntar o eliminar objetos, llamar al método Refresh o incluso ejecutar consultas con un valor MergeOption de PreserveChanges pueden tener resultados impredecibles.

Debido a la importancia de mantener el ObjectStateManager sincronizado con cualquier cambio en los valores de las entidades POCO adjuntas, el método SaveChanges llama primero al método DetectChanges de forma predeterminada. Si realizó cambios en el grafo y planeó utilizar cualquiera de los siguientes métodos, antes de llamar a SaveChanges, se recomienda llamar a DetectChanges:

Vea también

Conceptos

Trabajar con entidades POCO (Entity Framework)