2016-05-12 61 views
4

我想以.csv格式從數據庫導入數據,並想將.csv導出到我的SQL服務器/ Oracle數據庫中。此刻我正在使用ASP.NET Core RC 1。我研究了SQLBulkCopy類,但問題是它沒有移植到ASP.NET Core。如何在ASP.NET Core 1.0中實現批量插入?

有人可以告訴我怎麼做,或者是否有任何其他兼容nuget包可用(與ASP.NET核心)?

+0

我正試圖解決這個特定的問題。你有沒有運氣? –

+0

不,我直到現在才找到解決方案。 – VirendraJ

+0

試試這個庫:https://github.com/borisdj/EFCore.BulkExtensions – borisdj

回答

1

.NET標準2.0現在支持許多.NET框架庫,這意味着SqlBulkCopy類可以與ASP.NET Core一起使用。數據集,Datatables和SQLBulkCopy將完成批量插入工作。有關.NETStandard 2.0的更多詳細信息,請參閱here

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

你會怎麼做,而不使用FastMember? –

+0

你會像SqlBulkCopy的其他用法那樣做。使用SqlBulkCopyColumnMapping,DataRows和DataColumns創建映射。我推薦FastMember,你會爲自己節省很多代碼 –

+0

這不會用於動態列表,如 OutputPerformanceDataToStorage (列表 dataToSave) –