Entity framework - objectcontext entsorgt Ausnahme
Ich habe Debuggen das Programm ohne Ergebnis, und leider kann ich nicht sehen, die Wurzel des Problems. Ich bekomme diese exception: Die ObjectContext-Instanz wurde entsorgt und kann nicht mehr verwendet werden, für Operationen, für die eine Verbindung erforderlich.
Gibt es 2 Tabellen:
- CustomerSet
- OrderSet
Ein Feld namens Kunden_id in der Tabelle Bestellungen sichert die Beziehung zwischen den Tabellen, und es ist eine virtuelle navigation Eigenschaft, die man als Kunde in der Tabelle Bestellungen als gut.
Das Szenario ist das folgende:
Ich fügen Sie ein element in der Tabelle Bestellungen:
Order order = new Order();
Order.order_id = GenerateId(IdType.Order);
Order.date = DateTime.Now;
Order.Customer_id = GetCustomerId(tbCustomerName.Text);
Insert(order);
Innerhalb der Insert-Methode gibt es DBContext in einer using-Anweisung, so dass es automatisch zu entsorgen, wenn nötig. Ich arbeite in diesem.
Danach, ich brauche die Daten vom zuvor eingefügten element (zum Beispiel brauche ich einige Eigentum des Kunden Feld).
Und jetzt hoffe ich, dass das Feld Kunde bekam Wert:
Order o = GetOrder(order.order_id);
Und ich habe dieses " o "mit einer Ausnahme im Feld "Kunde": o.Der Kunde hat eine Ausnahme vom Typ 'System.ObjectDisposedException'
Spielte ich mit lazy loading, einschalten oder ausschalten, aber ich hat nicht geklappt. Die situation ist die gleiche...
Was muss ich machen ein Durcheinander mit?
Was ist wirklich nett ist,,, dass, wenn ich gehen Schritt für Schritt mit F11, das funktioniert oft richtig!
Bitte Hilfe!!! Vielen Dank im Voraus.
- Sie müssen nach ein paar mehr details zu deinem code, ohne zu wissen, wie und Wann, du bist immer DbContext-Objekte ist es unmöglich zu wissen, was Los ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht genau "bei Bedarf". Es fordert
IDisposable.Dispose()
auf das Kontext-Objekt, sobald es außerhalb des Gültigkeitsbereichs derusing
block.Ihrem Kontext angeordnet ist, an diesem Punkt. Wenn Ihr handeln erfordert, lazy loading, das wird scheitern, weil der Kontext nicht zur Verfügung führen Sie die lazy load.
Wenn Sie müssen in der Regel Zugriff auf ein Objekt, das noch nicht geladen wurde, ist der effizienteste Ansatz ist wahrscheinlich zu verwenden
.Include
um es zu laden, wenn Sie Sie abrufen, den rest Ihres Objekts graph. Das heißt eager loading.Wenn Sie gelegentlich brauchen, der Zugriff auf ein Objekt nicht geladen werden, wenn laden Sie den rest Ihrer Objekt-Grafik, Sie benötigen einen neuen Kontext stellen.
Für eine Diskussion der be-bezogene Objekte, schlage ich vor,
http://msdn.microsoft.com/en-us/data/jj574232.aspx
Wenn Sie eine using-Anweisung innerhalb
Insert
dann der Zusammenhang Weg ist.Dass ist in Ordnung, solange Sie sicherstellen, dass als Teil der
Insert()
order.order_id
bekommt die neue Id und dasGetOrder()
feuert einen neuen Kontext