エンティティフレームワークの「ObjectContextインスタンスが処分された」例外
のトラブルシューティングエラーに遭遇した「ObjectContextインスタンスは処分されており、接続を必要とする操作には使用できなくなりました」? このガイドはソリューションを提供します
根本原因:
エンティティフレームワークのデフォルトのレイジーロードメカニズムは、多くの場合犯人です。 Lazy Loadingが有効になっているため、ナビゲーションプロパティは仮想としてマークされているため、EFは需要のあるロード関連データを処理するプロキシクラスを作成できます。 問題を理解する:例:
を説明しましょうefは、
<code class="language-csharp">public class MemberLoan { public string LoandProviderCode { get; set; } public virtual Membership Membership { get; set; } }</code>に拡張されるプロキシクラスを生成します。 このプロキシは、
プロパティを怠laziillyロードするための参照を保持しています。 問題は、次の場合に発生します
MemberLoan
DbContext
a Membership
using
ブロックの外側に返されます。
DbContext
後で、怠zyなロードされたプロパティにアクセスしようとする試みがなされます。
using
は、怠zyなロードされたプロパティにアクセスされる前に処分され、「objectdisposedexception」につながります。
このアプローチは、すべてのメンバーシップを前もってロードし、例外を防ぎます
DbContext
より深いダイビングについては、関連するエンティティの読み込みに関するMicrosoftのドキュメントを参照してください:https://www.php.cn/link/7515989d1c2ff94c0cf8c5e4aefd3d12b
以上がEntity Framework の「ObjectContext インスタンスが破棄されました」例外を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。