如何在ASP.NET Core 1.0中實現批量插入?

asp.net-core asp.net-core-1.0 entity-framework-core

我想以.csv格式從數據庫導入數據,並希望將.csv導出到我的SQL Server / Oracle數據庫中。我目前正在使用ASP.NET Core RC 1。我查看了SQLBulkCopy類,但問題是它沒有移植到ASP.NET Core。

有人能告訴我我該怎麼做或者是否有其他兼容的nuget包(使用ASP.NET Core)?

一般承認的答案

.NET Standard 2.0現在支持許多.NET框架庫,這意味著SqlBulkCopy類可以與ASP.NET Core一起使用。數據集,數據表和SQLBulkCopy將完成批量插入的工作。 在此處查找有關.NETStandard 2.0的更多詳細信息。


熱門答案

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;
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow