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

4
我想要将数据库中的数据以 .csv 格式导入,然后将 .csv 导出到我的 SQL Server/Oracle 数据库中。我目前正在使用 ASP.NET Core RC 1。我已经研究了 SQLBulkCopy 类,但问题是它没有移植到 ASP.NET Core 中。
请问有没有其他兼容 ASP.NET Core 的 nuget 包可用?您能告诉我怎么做吗?

我也正在尝试解决这个具体的问题。你有没有成功? - Johnathon Sullinger
没有,我到现在还没有找到任何解决方案。 - VirendraJ
尝试使用这个库:https://github.com/borisdj/EFCore.BulkExtensions - borisdj
上周,.NET Standard 2.0 被宣布,并且 sqlbulkcopy 现在可用于 ASP.NET Core。更多详情请参见以下链接: http://www.talkingdotnet.com/whats-new-in-net-standard-2/ - VirendraJ
2个回答

3

微软已将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;
}

你如果不使用FastMember,你会怎么做呢? - Tim P.
你可以像使用 SqlBulkCopy 的任何其他用法一样来执行它。使用 SqlBulkCopyColumnMapping、DataRows 和 DataColumns 创建映射。我建议使用 FastMember,这样可以节省很多代码。 - Johnathon Sullinger
这个不能处理动态列表,比如 OutputPerformanceDataToStorage<T>(List<T> dataToSave)。 - Andrii Horda

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接