1

メインフォームを使用してアプリケーションを構築しているため、次のUser Controlsコードでユーザーコントロールを表示します。

        Modules.CtrlListContractors mo = new Modules.CtrlListContractors();
        splitContainerControl.Panel1.Controls.Clear();
        splitContainerControl.Panel1.Controls.Add(mo);

そして、User Controlこのエラーメッセージに関する私の問題以外は何でも入れることができます:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

GridView内部として表示されるテーブルとの関係がありCtrlListContractors、メニューボタンをクリックして表示すると、上記のエラーメッセージが表示されます。関連するテーブルから追加のデータを取得するには、さらにクエリを実行する必要があるためCtrlListContractorsだと思います。Lazy Loading

User Control Load イベントで実行するこのコードがあります。

using (ContractorsEntities context = new ContractorsEntities(Properties.Settings.Default.Connection))
        {
            memberBindingSource.DataSource = context.Members.ToList();
        }

ObjectContextが破棄される前に、同じクエリでメインテーブルと関連テーブルからすべてのデータを取得できれば、問題は解決すると思います

4

1 に答える 1

3

ObjectContext(またはDbContext) を破棄する場合は、最初に必要なすべてのデータを取得する必要があります。関連エンティティを含む。

を使用して行うことができます。2Includeのオーバーロードがあります。Include(string)Include

したがって、関係があると仮定すると、次のコレクションMember (0-1) ---- (*) Contractorsを作成できます。Include

context.Members.Include(x => x.Contractors).ToList();

しかし、私が言ったように、コンテキストを破棄する前に必要なものをすべて含める必要があります。それか、コンテキストを破棄せずに詳細を遅延ロードします。

于 2013-05-04T08:59:38.827 に答える