1

〜43k行のテーブルでこれを行っています:

MyDbContext.Stores.Load();
MyDbContext.Stores.Local.Count.Dump(); //horrible performance!

最初の命令が select ステートメントを起動してすべての行をフェッチすることをプロファイラーで確認できます。実際には、2 番目の命令は正しい値を返しますが、約 12 秒後には、すべてのデータがメモリにある必要があることを考えると、期待していたものではありません。Entity Frameworkの.Localの何が問題になっていますか(またはその本当の目的は何ですか)?

4

1 に答える 1

0

私はあなたがこれをすべきだと思います:

var stores = MyDbContext.Stores.ToList();

// stores is in memory after executing .ToList()
var count = stores.Count();

DbSet.Localプロパティ

このプロパティは、指定されたDbSetのコンテキストによって現在追跡されているすべてのUnchanged、Modified、およびAdditionedオブジェクトを含むObservableCollectionを返します。返される監視可能なコレクションは、基になるDbSetコレクションおよびコンテキストのコンテンツと同期を保ちます。これは、監視可能なコレクションを変更したり、基になるDbSetコレクションにエンティティを追加/削除したり(クエリの実行によるエンティティの追加を含む)できることを意味し、両方のコレクションが同期されます。

このプロパティは、データバインディングアプリケーションでよく使用されます。

于 2012-10-20T17:03:43.457 に答える