2011-12-31 16 views
5

C'è un buon modo per rilevare quando le modifiche ObjectContext vengono effettivamente commesse?Entity Framework 4: evento ObjectContext in caso di salvataggio riuscito

SavingChanges si verifica prima di andare all'archivio dati, ma ho anche bisogno di un modo per sapere se quelle modifiche sono state effettivamente commesse.

Grazie in anticipo John

Aggiornamento:

Quello che ho è un codice prima DbContext. Questo viene inserito in dati dinamici che, come ho scoperto, utilizzano l'ObjectContext interno di DbContext (a cui ho accesso durante il casting su IObjectContextAdapter). Non si chiama SaveChanges di dbcontext, al suo posto viene utilizzato SaveChanges di objectcontext. Tutto quello che voglio fare è ricevere una notifica dopo che il salvataggio è stato completato (ad esempio, SavedChanges) in modo da poter invalidare la cache.

+0

Se non esiste alcuna eccezione sono stati commited tali modifiche. –

+0

Non sto chiamando SaveChanges(). C'è un sacco di possibili chiamanti di SaveChanges() così invece di andare a tutti loro (se ciò è possibile anche) e modificarli così posso essere chiamato dopo SaveChanges() speravo che lo avrei catturato nel DbContext. – John

+0

Non riesci a connetterti all'evento SavingChanges? http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx – rene

risposta

7

Non esiste un evento build-in per gestire questo problema ma è possibile sostituire il metodo SaveChanges nel contesto derivato e attivare qualsiasi evento personalizzato specifico per il proprio tipo di contesto dopo aver chiamato base.SaveChanges.

+0

Questo vale per DbContext ma in DynamicData viene chiamato ObjectContext.SaveChanges() su cui non ho alcun controllo (da cui la richiesta ObjectContext nel titolo della domanda). – John

+0

Puoi anche sovrascrivere 'SaveChanges (SaveOptions)' per 'ObjectContext' ei dati dinamici accettano il tuo' ObjectContext' derivato, quindi non vedo la differenza. –

+0

Lo esaminerò. – John

0

scusami, ma non riesco a trovare la soluzione nella risposta.

Mi permetta di riformulare questa domanda secondo la mia comprensione (e il mio caso):

Sto usando Dynamic Data, che accetta solo ObjectContext come configurazione; se si utilizza DbContext (che è il modo di andare con il codice prima), allora si dovrà passare alla proprietà "IObjectContextAdapater.ObjectContext" come la seguente:

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

Il problema qui è che quando si salvano le modifiche, la Il metodo SaveChanges di MyDbContext NON viene chiamato, mentre Dynamic Data chiama il metodo SaveChanges in MyDbContext.ObjectContext. In questo caso, l'override delle SaveChanges in MyDbContext è inutile.

Come possiamo accedere a SaveChanges nella proprietà ObjectContext e modificare il comportamento in modo da poter scrivere il nostro codice personalizzato?

Ma in ogni caso, la soluzione che ho trovato corretto era in un commento di "rene" per la domanda di cui sopra, che è l'aggiunta di un gestore eventi per SavingChanges evento nella proprietà ObjectContext, ecco il link di nuovo:

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

spero che questo libera

Problemi correlati