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>
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:
using
-Block für das DbContext
wird verwendet.using
-Blocks zurückgegeben.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>
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!