2016-05-12 67 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) –