我想以.csv格式从数据库导入数据,并想将.csv导出到我的SQL服务器/ Oracle数据库中。此刻我正在使用ASP.NET Core RC 1。我研究了SQLBulkCopy类,但问题是它没有移植到ASP.NET Core。如何在ASP.NET Core 1.0中实现批量插入?
有人可以告诉我怎么做,或者是否有任何其他兼容nuget包可用(与ASP.NET核心)?
我想以.csv格式从数据库导入数据,并想将.csv导出到我的SQL服务器/ Oracle数据库中。此刻我正在使用ASP.NET Core RC 1。我研究了SQLBulkCopy类,但问题是它没有移植到ASP.NET Core。如何在ASP.NET Core 1.0中实现批量插入?
有人可以告诉我怎么做,或者是否有任何其他兼容nuget包可用(与ASP.NET核心)?
.NET标准2.0现在支持许多.NET框架库,这意味着SqlBulkCopy类可以与ASP.NET Core一起使用。数据集,Datatables和SQLBulkCopy将完成批量插入工作。有关.NETStandard 2.0的更多详细信息,请参阅here。
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;
}
你会怎么做,而不使用FastMember? –
你会像SqlBulkCopy的其他用法那样做。使用SqlBulkCopyColumnMapping,DataRows和DataColumns创建映射。我推荐FastMember,你会为自己节省很多代码 –
这不会用于动态列表,如 OutputPerformanceDataToStorage
我正试图解决这个特定的问题。你有没有运气? –
不,我直到现在才找到解决方案。 – VirendraJ
试试这个库:https://github.com/borisdj/EFCore.BulkExtensions – borisdj