2015-09-24 11 views
6

sto ottenendo alcuni dati dal database e la memorizzazione di questo in una variabile globale come indicato:Convert System.Data.Entity.DynamicProxies a (non proxy) di classe in C#

//Global Variable 
public static List<stuff> Stuff; 

using (var context = new StuffContext()) 
{ 
    stuff = new List<stuff>(); 
    stuff = (from r in context.Stuff 
       select r).ToList(); 
} 

Il problema che sto avendo è che il contesto si chiude e quando desidero accedere ad alcuni dei dati memorizzati nella variabile globale, non posso.

I dati sono di System.Data.Entity.DynamicProxies.Stuff invece di Application.Model.Stuff che significa poi ricevo questo errore quando provo a fare qualcosa con i dati:

"The ObjectContext instance has been disposed and can no longer be used for operations that require a connection." 

La mia domanda è come posso, usando il codice di cui sopra come esempio, convertire/cast nel tipo che voglio in modo che possa usare i dati altrove nella mia applicazione?

Edit: Screen Grab rapido dell'errore: enter image description here

+3

Quale operazione specifica ti dà quell'errore? Stai tentando di accedere ad alcune proprietà che utilizzano il caricamento lazy? – sstan

+2

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] (http://stackoverflow.com/questions/18398356/how-to-solve-the- error-the-ObjectContext-esempio-è-stato-disposta-and-can-no-l) – sstan

risposta

0

La soluzione è dovuta al caricamento pigro, dopo tutto.

Ho dovuto dire alla query di prendere tutto in modo che quando il contesto si chiudesse avessi ancora accesso ai dati. Questa è la modifica che dovevo fare:

public static List<stuff> Stuff; 

using (var context = new StuffContext()) 
{ 
    stuff = new List<stuff>(); 
    stuff = (from r in context.Stuff 
      .Include(s => s.MoreStuff).Include(s => s.EvenMoreStuff) 
      select r).ToList(); 
}