bbr*_*nck 2 .net entity-framework asp.net-web-api asp.net-core
我正在使用 .NET Core WebApi 和 EF Core。
我有以下场景:
我的问题:
所以我想创建一些任务来将批处理存储在数据库中(但在 .NET Core WebApi 中),你不能运行后台任务,对吧?
你们将如何实现这一目标?
一种方法是使用SqlBulkCopy将数据上传到临时表中,然后将数据查询到适当的表中。例如:
await connection.ExecuteAsync(@"CREATE TABLE #TempTable
(
[X] int NULL,
[Y] nvarchar(100) NULL,
[Z] datetime NULL
)", null, transaction);
Run Code Online (Sandbox Code Playgroud)
DataTable并填充 CSV 数据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);
Run Code Online (Sandbox Code Playgroud)
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.DestinationTableName = "#TempTable";
bulkCopy.EnableStreaming = true;
await bulkCopy.WriteToServerAsync(dataTable);
}
Run Code Online (Sandbox Code Playgroud)
await connection.ExecuteAsync("DROP TABLE #TempTable", null, transaction);
Run Code Online (Sandbox Code Playgroud)
我发现这种方法比 EF 快得多,可以将数据批量导入数据库,同时维护一些业务逻辑。