如何使用Entity Framework将大型存档表导出为CSV?

Rob*_*ert 0 c# sql-server csv asp.net-mvc entity-framework

我们有一个ASP.NET MVC Web应用程序,可与带有EF6的MS SQL Server Epress数据库进行通信。在数据库中,我们有一个大于10 mio的大型存档表。行。存档表相对简单,只有少量的ID,一个值和一个时间戳。

我已经有了一个“工作”控制器方法,该方法从DbContext中获取数据作为我的archiveEntry实体的IQueryable,然后将其放入.ToList()的列表中,从中创建一个CSV文件,将其压缩后返回。客户端作为文件下载。但是,问题在于整个表太慢了,因为有250000行,这大约需要15分钟。

有没有一种方法可以在数据库中直接查询和创建CSV并将其直接传递给客户端?

Que*_*ger 6

您可以用“ Dapper”之类的东西替换EF来读取实体。

更多信息在这里:https : //dapper-tutorial.net/dapper

另一种方法,如果要保留EF,则从上下文中禁用更改跟踪(因为您只是在读取实体)

您有两种选择:

  1. myContext.AutoDetectChangesEnabled = false;
  2. var logs= myContext.Logs.AsNoTracking();

然后使用高性能CSV编写器:

这是一个很好的:https : //joshclose.github.io/CsvHelper/