つまり、エンティティを取得してObjectContextを破棄すると、すべてのエンティティを明示的にデタッチする必要がありますか?私のObjectContextを破棄した場合、エンティティは切り離されていますか?
8
A
答えて
2
エンティティは、コンテキストが破棄されるとデタッチされます。以下の記事を参照してください:
5
ありませんあなたは、エンティティに切り離す呼び出す必要はありません。あなたが何かを行う場合は、:
var people = Context.Person.Where(p => p.FirstName == "John");
をして、あなたのコンテキストを処分のIEnumerableが実行を延期したため、人々は、例外がスローされます。これを行う:
あなたの人リストを引き続き使用できます。文脈が配置された後、あなたが特定のエンティティではなく列挙をフェッチしたので
さらに、
var john = Context.Person.FirstOrDefault(p => p.Id == 342);
は、動作します。
7
多分Detach
の意味に依存します。添付されたエンティティは、コンテキストがエンティティについて知っていて、その変更を追跡することを意味します。コンテキストを破棄すると、それ以上変更を追跡できなくなり、エンティティは切り離されたようになります。ここでのような意味合いが本当にあります。
動的プロキシ(POCO - ダイナミックな変更の追跡またはレイジーローディング)を使用している場合、プロキシ自体はコンテキストに対して内部的に後方参照を保持しますが、コンテキストの廃棄には反応しません。それはまだ参照(btw。これはいくつかの厄介なメモリリークのソースになることができます)を保持します。これは、2つの状況で問題を起こす:
- あなたはそれが(元のコンテキストがすでに死んでいるという事実にもかかわらず)エンティティは、単一のコンテキストによって追跡することができますいくつかの例外がスローされます別のコンテキストに、このようなエンティティを添付しようとします。
- あなたが熱心にロードされていないナビゲーションプロパティにアクセスしようとすると、プロキシが廃棄されたコンテキストで遅延ロードを引き起こすため、
ObjectDisposedException
が返されます。
これを回避する唯一の方法は、動的プロキシを無効にするか、コンテキストを破棄する前にエンティティを手動で切り離すことです。これにはもう1つの欠点があります。
関連する問題
- 1. org.hibernate.PersistentObjectException:切り離されたエンティティは、私はテストのためにメモリデータベースにH2を使用しています
- 2. 更新切り離さエンティティ
- 3. 含まれているフラグメントが破棄された場合、ViewPagerをプログラムで削除しますか?
- 4. グラフをObjectContextから切り離して別のオブジェクトに再結合することはできますか?
- 5. ネストされたリソースが依存破壊で適切に破棄されない
- 6. ObjectContextインスタンスが破棄され、接続が必要な操作には使用できなくなりました
- 7. コンテンツタイプが許可されていない場合、アップロードされたファイルを破棄する方法は?
- 8. ユーザーコントロールは破棄されていない
- 9. DbContextが破棄されました
- 10. エラー:ObjectContextインスタンスが破棄され、接続が必要な操作に使用できなくなりました
- 11. stackPanel1.Children.RemoveAtはコントロールを破棄(破棄)しますか?
- 12. 匿名メソッドでは、キャプチャされた変数をどのように解放/破棄/破棄しますか?
- 13. プログラムが予期せずシャットダウンした場合、IDisposableオブジェクトは破棄されますか?
- 14. Rails link_toネストされたリソースを破棄しますか?
- 15. Qtでプラグインから返されたQWidgetを破棄します
- 16. Railsはネストされたエントリを破棄します。
- 17. touchOverflowEnabledは固定されたdivを破棄します
- 18. PHP - 10分でアクションがない場合はセッションを破棄します
- 19. 内部例外のプロパティが破棄されていますか?
- 20. パケットが破棄されました - どのパケットがドロップされているかを確認しますか?
- 21. パッケージの既存の状態は破棄されました
- 22. AsyncTaskのProgressDialogが更新または破棄されない
- 23. ライターが破棄されたときにストリームが破棄されるのはなぜですか?
- 24. アクセスが破棄されましたlinqからSQLへのDataContext
- 25. Ninject - 要求スコープは既に破棄されています
- 26. IConnectableObservableを破棄してもOnCompleteは送信されません
- 27. バイナリが破棄された後のデバッグセクション
- 28. 長さのデータを破棄した場合のCの配列構文のポイントは何ですか?
- 29. Windowsフォームがクローズされていますが破棄されていません
- 30. ダイアログフラグメントが破棄されたときにフラグメントをリフレッシュします
http://stackoverflow.com/questions/2244843/entity-framework-detaching-entities-when-objectcontext-disposedデタッチする必要があると示唆していますか?それは正しいのですか? – glosrob