Deridere o fingere DbEntityEntry o creare un nuovo DbEntityEntry

Sulla scia della mia altra domanda su come deridere DbContext.Set ho un’altra domanda su come deridere il codice EF in primo luogo.

Ora ho un metodo per il mio aggiornamento che sembra:

if (entity == null) throw new ArgumentNullException("entity"); Context.GetIDbSet().Attach(entity); Context.Entry(entity).State = EntityState.Modified; Context.CommitChanges(); return entity; 

Il contesto è un’interfaccia del mio DbContext.

Il problema per cui sto correndo è, come gestisco il

Context.Entry(entity).State .

Ho fatto un passo su questo codice e funziona quando ho un vero live DbContext come implementazione della mia interfaccia Context. Ma quando metto il mio contesto falso lì, non so come gestirlo.

Non esiste un costruttore per una class DbEntityEntry, quindi non posso semplicemente crearne uno nuovo nel mio contesto falso.

Qualcuno ha avuto qualche successo con derisione o falsificazione di DbEntityEntry nelle tue soluzioni CodeFirst?

O c’è un modo migliore per gestire i cambiamenti di stato?

Proprio come l’altro caso, quello che ti serve è aggiungere un ulteriore livello di riferimento indiretto:

 interface ISalesContext { IDbSet GetIDbSet(); void SetModified(object entity) } class SalesContext : DbContext, ISalesContext { public IDbSet GetIDbSet() { return Set(); } public void SetModified(object entity) { Entry(entity).State = EntityState.Modified; } } 

Quindi, invece di chiamare l’implementazione, basta chiamare SetModified .