Database 如何使用EF加载整个数据库

Database 如何使用EF加载整个数据库,database,entity-framework,entity-framework-4,eager-loading,Database,Entity Framework,Entity Framework 4,Eager Loading,我的数据库由5个表组成,总共约10000行。共享文件夹上的SQL Server CE需要约1Mb的内存。数据库本身是分级的国家区域城市街道建筑。我使用的是实体框架4 由于数据库规模较小,用户可以在WPF列表视图中浏览和编辑所有2000个城市。但到目前为止,我尝试的每一种方法的GUI都是缓慢的(因为有很多数据库往返,使用虚拟数据的GUI是轻快的)。如何通过一次或几次数据库往返将整个数据库加载到内存中 我尝试了多个Include(),但我注意到性能有很大的损失 我要点灯吗?我也可以使用普通的asci

我的数据库由5个表组成,总共约10000行。共享文件夹上的SQL Server CE需要约1Mb的内存。数据库本身是分级的国家区域城市街道建筑。我使用的是实体框架4

由于数据库规模较小,用户可以在WPF列表视图中浏览和编辑所有2000个城市。但到目前为止,我尝试的每一种方法的GUI都是缓慢的(因为有很多数据库往返,使用虚拟数据的GUI是轻快的)。如何通过一次或几次数据库往返将整个数据库加载到内存中

我尝试了多个
Include()
,但我注意到性能有很大的损失


我要点灯吗?我也可以使用普通的ascii CSV文件而不是数据库,但这显然会排除并发性。

老实说,我自己也做过类似的事情,我的答案是在本地复制整个数据库并处理它

如果您不仅想阅读,还想写作,我绝对建议您放弃CE,安装一个Sql Server的Express版本。它们是为这种情况设计的;行政长官不是*


*SP1对于并发访问更好,但对于大型数据集,通过网络将永远无法实现。

我在上一节课上再次问了这个问题,他们很乐意给我一些指导:

基本上,我的问题可以重述如下:

  • 应用程序启动时从数据库只读一次
  • 从本地数据而不是数据库执行所有后续查询(以提高性能)
  • 每次添加或删除实体时写入上下文和数据库
使用普通EF是不可能的,因为每个查询都会进入数据库。这意味着我必须在启动时快速读取数据,然后缓存它

实施详情:


最好的方法似乎是使用快速导入数据,然后缓存数据,例如使用。从我的第一次实验来看,它似乎工作得很好。

EF实现了IdentityMap模式,因此所有实体都缓存在上下文中。因此,如果将所有实体加载到上下文中,则不会再查询DB。