我想以.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