asp.net gridviewエラー: "objectContextインスタンスが廃止されました"
この記事では、エンティティフレームワークを使用して、ASP.NETアプリケーションの共通を扱います。 これは、GridViewを登録するときに多くの場合発生します。特に関連するデータフィールドをターゲットにしています(例の例のように)。
InvalidOperationException
LoanProductName
根本原因:怠zyな負荷とdbcontext処分
Entity Frameworkのデフォルトのレイジーロードメカニズムは、ナビゲーションプロパティのプロキシオブジェクトを作成します。これらのプロキシは、アクセス時に関連データを取得するためにに依存しています。 問題は、アプリケーションが怠zyなロードされたプロパティにアクセスしようとする前に
を処分するときに発生します。
この典型的なシナリオを考えてみてください:DbContext
DbContext
ステートメントは、
この処分の後、エラーが発生します。
<code class="language-csharp">using (CosisEntities db = new CosisEntities()) { // ...data retrieval using db... } // ...later, GridView attempts to access lazy-loaded data...</code>
using
DbContext
2つの効果的なソリューションがこのエラーを防ぎます:
の前に必要なナビゲーションプロパティを明示的にロードします
。。
DbContext
2。怠zyな読み込みを無効にする:
<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>
ナビゲーションプロパティからInclude(m => m.LoanProduct)
キーワードを削除すると、怠zyなロードプロキシの作成が防止されます。
LoanProduct
熱心な読み込みまたは無効化の怠zyなロードのいずれかを実装することにより、MemberLoans
処分エラーを防ぎ、GridViewが正しく入力されるようにします。アプリケーションのデータアクセスパターンとパフォーマンス要件に最適な方法を選択してください。
以上がエンティティフレームワークを使用するとき、私のasp.net gridviewが「ObjectContextインスタンスが処分された...」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。