ASP.NET GridView -Fehler: "ObjectContext -Instanz entsorgt"
Dieser Artikel befasst sich mit den gemeinsamen InvalidOperationException
in ASP.NET -Anwendungen unter Verwendung von Entity Framework: "Die ObjectContext -Instanz wurde entsorgt und kann nicht mehr für Vorgänge verwendet werden, die eine Verbindung erfordern." Dies tritt häufig bei der Bevölkerung eines Gridviews auf, das speziell auf ein verwandtes Datenfeld abzielt (wie LoanProductName
im Beispiel).
Die Grundursache: Lazy Loading und dbContext -Entsorgung
Entity Framework standardmäßig fauler Lademechanismus erstellt Proxy -Objekte für Navigationseigenschaften. Diese Stellvertreter stützen sich auf das DbContext
-Ans, um Daten beim Zugriff zu holen. Das Problem tritt auf, wenn der DbContext
vor entsorgt wird. Die Anwendung versucht, auf eine faul beladene Eigenschaft zuzugreifen.
<code class="language-csharp">using (CosisEntities db = new CosisEntities()) { // ...data retrieval using db... } // ...later, GridView attempts to access lazy-loaded data...</code>
-Anweisung stellt sicher, dass der using
unmittelbar nach dem geschlossenen Block entsorgt wird. Wenn die Datenbindung des Gridviews nach DbContext
in dieser Entsorgung auftritt, tritt der Fehler auf.
Zwei effektive Lösungen verhindern diesen Fehler:
1. Eifriger Belastung:
Belastung der erforderlichen Navigationseigenschaft vor explizit. Der wird entsorgt.
DbContext
<code class="language-csharp">using (CosisEntities db = new CosisEntities()) { var query = db.MemberLoans.Include(m => m.LoanProduct); // Eager load LoanProduct // ...use query to populate GridView... }</code>
Daten zusammen mit Include(m => m.LoanProduct)
. LoanProduct
abgerufen werden
MemberLoans
Ändern Sie Ihre Entitätsklasse, um das faule Laden insgesamt zu verhindern. Dies ist für kleinere Datensätze einfacher, kann jedoch die Leistung mit großen Datensätzen beeinflussen.
Das Entfernen des Schlüsselworts<code class="language-csharp">public class MemberLoan { public string LoanProviderCode { get; set; } public LoanProduct LoanProduct { get; set; } // Remove the 'virtual' keyword }</code>
virtual
Durch die Implementierung von eifrigem Laden oder Deaktivieren von faulen Laden verhindern Sie den
Das obige ist der detaillierte Inhalt vonWarum werfen meine ASP.NET -Gridview 'Die ObjectContext -Instanz wurde entsorgt ...' bei der Verwendung von Entity Framework aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!