如何在ASP.NET Core 1.0中实现批量插入?

时间:2016-05-12 06:56:17

标签: asp.net-core entity-framework-core asp.net-core-1.0

我想以.csv格式从数据库导入数据,并希望将.csv导出到我的SQL Server / Oracle数据库中。我目前正在使用ASP.NET Core RC 1。我查看了SQLBulkCopy类,但问题是它没有移植到ASP.NET Core。

有人可以告诉我该怎么做或者是否有其他兼容的nuget包(使用ASP.NET Core)?

2 个答案:

答案 0 :(得分:3)

Microsoft已将SqlBulkCopy添加到.NET Core,因此您可以将其作为System.Data.SqlClient NuGet包的一部分引入。我选择使用@MarcGravell的FastMember来处理我的数据映射工作,但你不必这样做。

FastMember将获取一组参数和一组对象,并从您的对象中提取映射到参数集合的值。真的简化了代码。

private async Task OutputPerformanceDataToStorage(List<PerformanceData> dataToSave)
{
    var storageParameters = new[] 
        {
            nameof(PerformanceData.PerformanceId),
            nameof(PerformanceData.IPAddress),
            nameof(PerformanceData.ControllerName),
            nameof(PerformanceData.ActionName),
            nameof(PerformanceData.ActionParameters),
            nameof(PerformanceData.ViewPath),
            nameof(PerformanceData.TotalRequestTimeInMilliseconds),
            nameof(PerformanceData.RequestStartedTimestamp),
            nameof(PerformanceData.RequestEndedTimestamp),
            nameof(PerformanceData.CreatedDateTime),
        };

    var sqlCopy = new SqlBulkCopy(this.connectionString, SqlBulkCopyOptions.Default);
    sqlCopy.DestinationTableName = "[Performance]";

    using (var reader = ObjectReader.Create(dataToSave, storageParameters))
    {
        await sqlCopy.WriteToServerAsync(reader);
    }
}

internal class PerformanceData
{
    public Guid PerformanceId;
    public double TotalRequestTimeInMilliseconds;
    public long RequestStartedTimestamp;
    public long RequestEndedTimestamp;
    public string IPAddress;
    public string ControllerName;
    public string ActionName;
    public string ViewPath;
    public string ActionParameters;
    public List<string> ActionParametersList;
    public DateTime CreatedDateTime;
}

答案 1 :(得分:1)

.NET Standard 2.0现在支持许多.NET框架库,这意味着SqlBulkCopy类可以与ASP.NET Core一起使用。数据集,数据表和SQLBulkCopy将完成批量插入的工作。有关.NETStandard 2.0 here的更多详细信息。