ASP.NET Core 1.0で一括挿入を実装するにはどうすればよいですか?

asp.net-core asp.net-core-1.0 entity-framework-core

質問

私は.csv形式でデータベースからデータをインポートしたいが、.csvをSQLサーバ/ Oracleデータベースにエクスポートしたい。現時点ではASP.NET Core RC 1を使用しています。 SQLBulkCopyクラスを調べましたが、問題はASP.NETコアに移植されていないことです。

誰かが私にそれをどうやって行うことができるか、または他の互換性のあるnugetパッケージ(ASP.NET Coreを使用可能)があるか教えてもらえますか?

受け入れられた回答

.NET Standard 2.0では、.NET Frameworkライブラリの多くがサポートされています。つまり、ASP.NET CoreでSqlBulkCopyクラスを使用できるようになります。 Dataset、Datatables、およびSQLBulkCopyは、一括挿入のための仕事をします。 .NETStandard 2.0の詳細はこちらをご覧ください


人気のある回答

マイクロソフトでは、 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;
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ