2015-09-24 9 views
6

ich einige Daten aus der Datenbank erhalten und diese wie in einer globalen Variablen zu speichern:konvertieren System.Data.Entity.DynamicProxies zu (non-Proxy) Klasse 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(); 
} 

Das Problem, das ich habe, ist, dass der Kontext geschlossen wird und wenn ich auf einige der in der globalen Variablen gespeicherten Daten zugreifen möchte, kann ich nicht.

Die Daten sind von System.Data.Entity.DynamicProxies.Stuff statt Application.Model.Stuff das bedeutet, dass ich dann diese Fehlermeldung erhalten, wenn ich versuche, etwas mit den Daten zu tun:

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

Meine Frage Wie kann ich, indem ich den obigen Code als Beispiel benutze, den gewünschten Typ konvertieren/umwandeln, damit ich die Daten wo sonst in meiner Anwendung verwenden kann?

Edit: Schnell Screen Grab des Fehlers: enter image description here

+3

Welche spezielle Operation gibt Ihnen diesen Fehler? Versuchen Sie, auf eine Eigenschaft zuzugreifen, die Lazy Loading verwendet? – sstan

+2

mögliches Duplikat von [So lösen Sie den Fehler Die ObjectContext-Instanz wurde entfernt und kann nicht mehr für Vorgänge verwendet werden, die eine Verbindung erfordern] (http://stackoverflow.com/questions/18398356/how-to-solve-the- error-the-objectcontext-instance-wurde-entsorgt-und-kann-nein-l) – sstan

Antwort

0

Die Lösung wurde auf Grund, nachdem alle verzögertes Laden.

Ich musste der Abfrage sagen, alles zu greifen, so dass, wenn der Kontext geschlossen wurde, ich immer noch Zugriff auf die Daten hatte. Dies ist die Änderung, die ich machen musste:

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(); 
}