6

Ho riscontrato problemi con una delle mie query a causa del rilevamento delle modifiche e delle funzionalità di caricamento lenta di EF. Il fatto è che dopo aver ottenuto il risultato della query, sto usando AutoMapper per mappare gli oggetti del dominio nel mio modello di business, ma continua a generare un'eccezione perché il contesto è stato eliminato.L'istanza ObjectContext è stata eliminata e non può più essere utilizzata per operazioni che richiedono una connessione

L'istanza ObjectContext è stata eliminata e non può più essere utilizzata per le operazioni che richiedono una connessione.

Quando guardo la collezione risultante nel debugger, vedo che si tratta di un elenco di DynamicProxy e non l'effettiva entità. Ho provato a fermare il rilevamento dei cambiamenti, ma questo non ha aiutato. Ecco il mio codice:

public List<ContentTypeColumn> GetContentTypeColumns(Int64 contentTypeId) 
    { 
     List<ContentTypeColumn> result = new List<ContentTypeColumn>(); 
     using (SCGREDbContext context = new SCGREDbContext()) 
     {     
      ContentType contentType = context.ContentTypes.Include("Parent").AsNoTracking().FirstOrDefault(x => x.Id.Equals(contentTypeId)); 

      result.AddRange(contentType.ContentTypeColumns.ToList()); 
      while (contentType.Parent != null) 
      { 
       result.AddRange(contentType.Parent.ContentTypeColumns.ToList()); 
       contentType = contentType.Parent; 
      }  
     } 
     return result.ToList(); 
    } 

Nota: Se avete bisogno di guardare nel mio modello di dominio coinvolti in questa operazione si può fare riferimento a this question.

+0

Caricamento lento? Questo potrebbe causare questo. –

+0

Lo so, e sto cercando di evitare il Lazy Loading in questo caso particolare, ma non riesco a trovare il modo di aggirarlo. Eventuali suggerimenti? – Kassem

+0

Possibile duplicato di [Come risolvere l'errore L'istanza di ObjectContext è stata eliminata e non può più essere utilizzata per operazioni che richiedono una connessione] (https://stackoverflow.com/questions/18398356/how-to-solve-the- error-the-objectcontext-instance-has-been-disposed-and-can-no-l) –

risposta

19

Se è necessario interrompere il caricamento pigro e cambiamento dinamico di monitoraggio si può semplicemente girare off:

using (SCGREDbContext context = new SCGREDbContext()) 
{ 
    context.Configuration.ProxyCreationEnabled = false; 
    ... 
} 
+0

Che cosa ha fatto ... Grazie :) – Kassem

+0

Perfetto! Questo mi ha appena salvato così tanto tempo! –

Problemi correlati