如何在 ASP.NET Core 1.0 中实现批量插入?
How can I implement Bulk insert in ASP.NET Core 1.0?
我想以 .csv 格式从数据库导入数据,并想将 .csv 导出到我的 SQL server/Oracle 数据库中。我现在正在使用 ASP.NET Core RC 1。我调查了 SQLBulkCopy class 但问题是它没有移植到 ASP.NET 核心。
谁能告诉我该怎么做,或者是否有任何其他兼容的 nuget 包可用(ASP.NET 核心)?
Microsoft 已添加 SqlBulkCopy to .NET Core, so you can bring it in as part of the System.Data.SqlClient
NuGet package. I opted to use FastMember by @MarcGravell 来处理映射我的数据的工作,但你不必这样做。
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;
}
.NET Standard 2.0 现在支持许多 .NET 框架库,这意味着 SqlBulkCopy class 可以与 ASP.NET Core 一起使用。 Dataset、Datatables 和 SQLBulkCopy 将完成批量插入的工作。查找有关 .NETStandard 2.0 的更多详细信息 here。
我想以 .csv 格式从数据库导入数据,并想将 .csv 导出到我的 SQL server/Oracle 数据库中。我现在正在使用 ASP.NET Core RC 1。我调查了 SQLBulkCopy class 但问题是它没有移植到 ASP.NET 核心。
谁能告诉我该怎么做,或者是否有任何其他兼容的 nuget 包可用(ASP.NET 核心)?
Microsoft 已添加 SqlBulkCopy to .NET Core, so you can bring it in as part of the System.Data.SqlClient
NuGet package. I opted to use FastMember by @MarcGravell 来处理映射我的数据的工作,但你不必这样做。
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;
}
.NET Standard 2.0 现在支持许多 .NET 框架库,这意味着 SqlBulkCopy class 可以与 ASP.NET Core 一起使用。 Dataset、Datatables 和 SQLBulkCopy 将完成批量插入的工作。查找有关 .NETStandard 2.0 的更多详细信息 here。