2011-12-31 19 views
5

¿Hay una buena manera de detectar cuándo se han confirmado los cambios ObjectContext?Entidad Framework 4: Evento ObjectContext al guardar con éxito

SavingChanges se produce antes de ir al almacén de datos, pero también necesito una forma de saber si esos cambios fueron realmente comprometidos

Gracias de antemano John

Actualización:

Lo que tengo es un código de primera DbContext. Esto se introduce en datos dinámicos que, como descubrí, utiliza el ObjectContext interno de DbContext (al que tengo acceso cuando los transfiero a IObjectContextAdapter). No se llama a SaveChanges de dbcontext, se usa SaveChanges de objectcontext. Todo lo que quiero hacer es recibir una notificación después de que se complete la operación de guardado (es decir, eventos Changes) para poder invalidar mi caché.

+0

Si no hay ninguna excepción, esos cambios fueron cometidos. –

+0

No estoy llamando a SaveChanges(). Hay un grupo de posibles usuarios de SaveChanges(), así que en lugar de ir a todos ellos (si eso es posible) y editarlos para que me llamen después de SaveChanges() esperaba encontrarlo en DbContext. – John

+0

¿No puedes conectarte al evento SavingChanges? http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx – rene

Respuesta

7

No hay evento incorporado para manejar esto pero puede anular el método SaveChanges en su contexto derivado y desencadenar cualquier evento personalizado específico para su propio tipo de contexto después de llamar al base.SaveChanges.

+0

Eso es cierto para el DbContext pero en DynamicData se invoca el ObjectContext.SaveChanges() sobre el que no tengo control (de ahí la solicitud ObjectContext en el título de la pregunta). – John

+0

También puede sobrescribir 'SaveChanges (SaveOptions)' para 'ObjectContext' y Dynamic Data acepta su' ObjectContext' derivado para que no vea la diferencia. –

+0

Lo investigaré. – John

0

Disculpe, pero no encuentro la solución en la respuesta.

Permítame rehacer esta pregunta de acuerdo a mi entendimiento (y mi caso):

estoy usando datos dinámicos, que sólo acepta como ObjectContext configuración; si utilizar DbContext (que es el camino a seguir con el Código de Primera), entonces usted tendrá que pasar la propiedad "IObjectContextAdapater.ObjectContext" como la siguiente:

DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter) new MyDbContext()).ObjectContext; }, new ContextConfiguration() { ScaffoldAllTables = true }); 

El problema aquí es que al guardar los cambios, el El método SaveChanges de MyDbContext NO se llama, en su lugar, Dynamic Data llama al método SaveChanges en MyDbContext.ObjectContext. Sobrescribir los SaveChanges en MyDbContext es inútil en este caso.

¿Cómo podemos acceder a SaveChanges en la propiedad ObjectContext y cambiar el comportamiento para que podamos escribir nuestro código personalizado?

Pero de todos modos, la solución que encontré correcta era en un comentario por "rene" a la pregunta anterior, que es la adición de un controlador de eventos para SavingChanges evento en la propiedad ObjectContext, aquí está el enlace de nuevo:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx

Espero que esto lo borre

Cuestiones relacionadas