.NET核心WebApi CSV文件解析和存储在数据库中
我正在使用.NET Core WebApi和EF Core 我有以下情况:.NET核心WebApi CSV文件解析和存储在数据库中,.net,entity-framework,asp.net-core,asp.net-web-api,.net,Entity Framework,Asp.net Core,Asp.net Web Api,我正在使用.NET Core WebApi和EF Core 我有以下情况: 我有一个接受CSV文件的端点 此CSV文件包含超过15000行 我需要解析这个CSV文件并将每一行存储在我的数据库中 在存储每一行之前,我需要检查其中的数据是否已经存在(4-5个值/行需要检查它们是否作为独立实体存在) 我的问题: 检查数据是否存在需要很长时间(15000次4-5次检查…) 所以我想创建一些任务来将batchwhise存储在DB中(但在.NET Core WebApi中),您不能运行后台任务,对吗 你
- 我有一个接受CSV文件的端点
- 此CSV文件包含超过15000行
- 我需要解析这个CSV文件并将每一行存储在我的数据库中
- 在存储每一行之前,我需要检查其中的数据是否已经存在(4-5个值/行需要检查它们是否作为独立实体存在)
你们是怎么做到的 一种方法是使用将数据上传到临时表中,然后将数据查询到适当的表中。例如:
DataTable
并填充CSV数据我发现这种方法比EF更快地将数据批量导入数据库,同时维护一些业务逻辑。您可以使用批量复制程序将数据上载到临时表中,然后将数据查询到适当的表中。这对于批量操作来说要快得多。您是否看到随着时间的推移,文件越来越大?从15K线路到15M线路或15B线路时会发生什么情况?如果是这样的话,使用ETL过程可能是一个更好的选择。检查所针对的表有多大,不能将其全部加载到内存中吗?至少有4-5列..@RajMore你说的这到底是什么意思(ETL)?这是一些错误的线索
await connection.ExecuteAsync(@"CREATE TABLE #TempTable
(
[X] int NULL,
[Y] nvarchar(100) NULL,
[Z] datetime NULL
)", null, transaction);
DataTable table = new DataTable();
dataTable.Columns.Add("X", typeof(int));
dataTable.Columns.Add("Y", typeof(string));
dataTable.Columns.Add("Z", typeof(DateTime));
//foreach csv record...
var row = dataTable.NewRow();
row["X"] = 1;
row["Y"] = "test";
row["Z"] = DateTime.Now;
dataTable.Rows.Add(row);
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.DestinationTableName = "#TempTable";
bulkCopy.EnableStreaming = true;
await bulkCopy.WriteToServerAsync(dataTable);
}
await connection.ExecuteAsync("DROP TABLE #TempTable", null, transaction);