1

我在一个有 ~43k 行的表上执行此操作:

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

我可以通过分析器看到第一条指令触发 select 语句以获取所有行。实际上,第二条指令返回正确的值,但在大约 12 秒之后,考虑到所有数据都应该在内存中,这不是我所期望的。实体框架中的 .Local 有什么问题(或它的真正目的是什么)?

4

1 回答 1

0

我认为你应该这样做:

var stores = MyDbContext.Stores.ToList();

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

DbSet.Local 属性

此属性返回一个 ObservableCollection,其中包含当前由给定 DbSet 的上下文跟踪的所有未更改、已修改和已添加对象。返回的可观察集合与底层 DbSet 集合和上下文内容保持同步。这意味着您可以修改 observable 集合或在底层 DbSet 集合中添加/删除实体(包括通过执行查询添加实体),并且两个集合将同步。

此属性通常用于数据绑定应用程序中。

于 2012-10-20T17:03:43.457 回答