Advocationは、Entity Frameworkでブロックを使用する場合はpopularとなりますが、this MVCのチュートリアルでは、クラスレベルで一度作成されるエンティティのオブジェクトコンテキストが表示されます。私は後者に最初に遭遇したので、私はそれを使っていました。私は今、それは本当に速いかどうかを確認するために使用したブロック方式に切り替えることをしようとしていますが、ビュー上で、このエラーに実行しています:MVC3、EF4、およびUsingブロック
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
ビューは、このによって作成されたコレクションにアクセスしようとしています。
homeView.UserList = new SelectList((from n in db.Users where n.US_INACTIVE == 0 orderby n.US_FULL_NAME select n).AsEnumerable(), "US_USER_ID", "US_FULL_NAME");
(それはSelectListのを使用する場合)、それを制御に移入されている必要があるとき、まだビューからオブジェクトコンテキストにアクセスしようとしている理由を私は理解していません。さらに混乱しているのは、この同じ問題がデータベースに取り込まれた他のデータでは発生しないためです。
ただし、使用ブロックからビューに適切にデータを取得するにはどうすればよいですか?または、MVCのために使うブロックを間違って使用していますが、クラスのオブジェクトコンテキストを1回だけ使用し続ける必要がありますか?
実際にはViewModelです。 UserListプロパティは、2番目のコードブロックに示すように、SelectListです。 AsEnumerableはクエリを実行しませんか?この例では、ToListメソッドを呼び出す方法はありますか? – Tyrsius
また、リポジトリのライフタイム管理の責任という意味についてはっきりしていません。 EFがこれを管理していない場合、どのように行われますか? – Tyrsius
@Tyrsius、 'AsEnumerable'はクエリを実行せず、ラムダ式から' IEnumerable 'を返します。リポジトリとは、リポジトリPattetnを意味します。それはあなたのコントローラが動作するいくつかの一般的なインターフェイスを実装して書く別のクラスです。もちろん、特定の実装(あなたの場合はEF)がDIフレームワークを使用してコントローラに注入されるので、コントローラ内ではDataContextssを管理するステートメントを使用することは決してできません。コントローラは、DataContextが何であるかを知るべきではありません... –