1

WinForms アプリケーションで EF 5.0 を使用しています。DBContext をすばやく破棄します。

それにもかかわらず、エンティティの静的リストを維持する必要がありますCustomer。これは、起動時に DBContext を使用して入力します。これもまた、すばやく破棄されます。さらに、アプリケーションの一部でマルチスレッドを使用することはほとんどありません。

問題は、この例外を毎回受け取ることです。

エンティティ オブジェクトは、IEntityChangeTracker の複数のインスタンスによって参照できません。

CustomerDBContext を破棄する前に、その静的リストのすべてをデタッチする必要がありますか? WinForms アプリケーションに他のデザインを使用する必要がありますか? フィードバックをお待ちしております。

4

3 に答える 3

2

EF と静的リストを明確に分離するために、データ転送オブジェクトを作成することを検討してください。

これの主な利点は、アプリケーションの残りの部分に対する EF の影響を制限することです。

于 2013-05-20T19:29:20.140 に答える
2

インスタンスを照会するときに AsNoTracking メソッドを使用してみてください: http://msdn.microsoft.com/en-us/library/gg679352(v=vs.103).aspx

于 2013-05-20T19:16:56.620 に答える
1

Customerエンティティ オブジェクトのリストは使用しませんが、いくつかのミラー タイプ、たとえばCustomerListItem.

Customerをアイテムに射影することで、リストにデータを入力できます

db.Customers.Select(c => new CustomerListItem { Name = c.Name, ... })

これにより、追跡されないオブジェクトが作成されます。また、エンティティ モデルの変更が、顧客リストに依存するアプリケーションの他の部分に影響を与えないことを確認できます。また、潜在的な遅延読み込み例外に遭遇することもありません (Customer遅延ナビゲーション プロパティがある場合)。

これはアプリケーション全体からアクセスできる静的リストであるため、ReadOnlyCollection.

于 2013-05-20T19:33:29.030 に答える