Heim > Backend-Entwicklung > C++ > Wie kann ich die Ausnahme von 'ObjectContext -Instanz haben' in Entity Framework behoben?

Wie kann ich die Ausnahme von 'ObjectContext -Instanz haben' in Entity Framework behoben?

DDD
Freigeben: 2025-01-26 01:31:09
Original
344 Leute haben es durchsucht

How to Fix the

Fehlerbehebung bei der Ausnahme „ObjectContext Instance Has Been Disposed“ in Entity Framework

Trifft der Fehler „Die ObjectContext-Instanz wurde verworfen und kann nicht mehr für Vorgänge verwendet werden, die eine Verbindung erfordern“? Dieser Leitfaden bietet eine Lösung.

Grundursache:

Der standardmäßige Lazy-Loading-Mechanismus von Entity Framework ist oft der Übeltäter. Wenn Lazy Loading aktiviert ist, werden Navigationseigenschaften als virtuell markiert, sodass EF Proxy-Klassen erstellen kann, die das Laden zugehöriger Daten bei Bedarf verarbeiten.

Das Problem verstehen:

Lassen Sie es uns anhand eines Beispiels veranschaulichen:

<code class="language-csharp">public class MemberLoan
{
   public string LoandProviderCode { get; set; }
   public virtual Membership Membership { get; set; }
}</code>
Nach dem Login kopieren

EF generiert eine Proxy-Klasse, die MemberLoan erweitert. Dieser Proxy behält einen DbContext-Verweis bei, um die Membership-Eigenschaft langsam zu laden. Das Problem tritt auf, wenn:

  1. Ein using-Block für das DbContext wird verwendet.
  2. Entitäten mit verzögert geladenen Eigenschaften werden außerhalb des using-Blocks zurückgegeben.
  3. Später wird versucht, auf eine Lazy-Loaded-Eigenschaft zuzugreifen.

Das DbContext wird entsorgt, bevor auf die Lazy-Loaded-Eigenschaft zugegriffen wird, was zur „ObjectDisposedException“ führt.

Die Lösung: Eager Loading

Die bevorzugte Lösung ist Eager Loading. Anstatt sich auf verzögertes Laden zu verlassen, laden Sie die erforderlichen Navigationseigenschaften vorab:

<code class="language-csharp">IQueryable<MemberLoan> query = db.MemberLoans.Include(m => m.Membership);</code>
Nach dem Login kopieren

Dieser Ansatz lädt alle Mitgliedschaften im Voraus und verhindert so die Ausnahme.

Weiterführende Literatur:

Weitere Informationen finden Sie in der Microsoft-Dokumentation zum Laden verwandter Entitäten: https://www.php.cn/link/7515989d1c2f94c0cf8c5e4aefd3d12b

Das obige ist der detaillierte Inhalt vonWie kann ich die Ausnahme von 'ObjectContext -Instanz haben' in Entity Framework behoben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage