/// <summary> /// /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="importer"></param> /// <param name="moveNextAsync"></param> /// <param name="getCurrentAsync"></param> /// <param name="writeAsync"></param> /// <param name="identityBehavior"></param> /// <param name="cancellationToken"></param> /// <returns></returns> private static async Task <int> BinaryImportWriteAsync <TEntity>(NpgsqlBinaryImporter importer, Func <Task <bool> > moveNextAsync, Func <Task <TEntity> > getCurrentAsync, Func <TEntity, Task> writeAsync, BulkImportIdentityBehavior identityBehavior, CancellationToken cancellationToken = default) where TEntity : class { var result = 0; while (await moveNextAsync()) { await importer.StartRowAsync(cancellationToken); await EnsureCustomizedOrderColumnAsync(importer, identityBehavior, result, cancellationToken); await writeAsync(await getCurrentAsync()); result++; } await importer.CompleteAsync(cancellationToken); return(result); }
private async Task WriteToStreamAsync(NpgsqlBinaryImporter writer, TEntity entity, CancellationToken cancellationToken) { await writer.StartRowAsync(cancellationToken); foreach (var columnDefinition in _columns) { await columnDefinition.WriteAsync(writer, entity, cancellationToken); } }
private async Task WriteToStream(NpgsqlBinaryImporter writer, IEnumerable <TEntity> entities) { foreach (var entity in entities) { await writer.StartRowAsync(); foreach (var columnDefinition in _columns) { await columnDefinition.Write(writer, entity); } } }
public static async Task PerformBulkCopyAsync(this DbDataReader dr, NpgsqlBinaryImporter writer, DataColumnCollection columns = null) { columns ??= dr.GetSchemaTable().Columns; while (await dr.ReadAsync()) { await writer.StartRowAsync(); foreach (DataColumn col in columns) { switch (dr[col.Ordinal]) { case bool x: await writer.WriteAsync(x); break; case byte x: await writer.WriteAsync(x); break; case sbyte x: await writer.WriteAsync(x); break; case short x: await writer.WriteAsync(x); break; case ushort x: await writer.WriteAsync(x); break; case int x: await writer.WriteAsync(x); break; case uint x: await writer.WriteAsync(x); break; case long x: await writer.WriteAsync(x); break; case ulong x: await writer.WriteAsync(x); break; case Guid x: await writer.WriteAsync(x); break; case DateTime x: await writer.WriteAsync(x); break; case TimeSpan x: await writer.WriteAsync(x); break; case string x: await writer.WriteAsync(x); break; case null: writer.WriteNull(); break; } } } await writer.CompleteAsync(); }