Skip to content

Commit 236bf15

Browse files
author
fabien.menager
committed
Fix method and class naming
1 parent 1c5ea13 commit 236bf15

14 files changed

Lines changed: 62 additions & 51 deletions

File tree

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# PhenX.EntityFrameworkCore.BulkInsert
22

3-
A high-performance, provider-agnostic bulk insert extension for Entity Framework Core. Supports SQL Server, PostgreSQL, SQLite.
3+
A high-performance, provider-agnostic bulk insert extension for Entity Framework Core 8+. Supports SQL Server, PostgreSQL, SQLite.
44

55
Its main purpose is to provide a fast way to perform simple bulk inserts in Entity Framework Core applications.
66

77
## Why this library?
88

9-
- **Performance**: It is designed to be fast and efficient, making it suitable for high-performance applications.
9+
- **Performance**: It is designed to be fast and memory efficient, making it suitable for high-performance applications.
1010
- **Provider-agnostic**: It works with multiple database providers (SQL Server, PostgreSQL, and SQLite), allowing you to use it in different environments without changing your code.
1111
- **Simplicity**: The API is simple and easy to use, making it accessible for developers of all skill levels.
1212

@@ -37,20 +37,30 @@ services.AddDbContext<MyDbContext>(options =>
3737
{
3838
options
3939
// .UseSqlServer(connectionString) // or UseNpgsql or UseSqlite, as appropriate
40-
.UseBulkInsert(); // <<< The important part
40+
41+
.UseBulkInsertPostgreSql()
42+
// OR
43+
.UseBulkInsertSqlServer()
44+
// OR
45+
.UseBulkInsertSqlite()
46+
;
4147
});
4248
```
4349

4450
2. Use the bulk insert extension method:
4551

4652
```csharp
47-
await dbContext.ExecuteInsertAsync(entities);
53+
// Asynchronously
54+
await dbContext.ExecuteBulkInsertAsync(entities);
55+
56+
// Or synchronously
57+
dbContext.ExecuteBulkInsert(entities);
4858
```
4959

5060
3. Optionally, you can configure the bulk insert options:
5161

5262
```csharp
53-
await dbContext.ExecuteInsertAsync(entities, options =>
63+
await dbContext.ExecuteBulkInsertAsync(entities, options =>
5464
{
5565
options.BatchSize = 1000; // Set the batch size for the insert operation, the default value is different for each provider
5666
});
@@ -59,7 +69,7 @@ await dbContext.ExecuteInsertAsync(entities, options =>
5969
4. You can also return the inserted entities (slower):
6070

6171
```csharp
62-
await dbContext.ExecuteInsertWithIdentityAsync(entities, options => {});
72+
await dbContext.ExecuteBulkInsertReturnEntitiesAsync(entities);
6373
```
6474

6575
## Roadmap

src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlDbContextOptionsExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public static class PostgreSqlDbContextOptionsExtensions
1111
/// <summary>
1212
/// Configures the DbContext to use the PostgreSQL bulk insert provider.
1313
/// </summary>
14-
public static DbContextOptionsBuilder UseExecuteInsertPostgreSql(this DbContextOptionsBuilder optionsBuilder)
14+
public static DbContextOptionsBuilder UseBulkInsertPostgreSql(this DbContextOptionsBuilder optionsBuilder)
1515
{
16-
var extension = optionsBuilder.Options.FindExtension<ExecuteInsertOptionsExtension<PostgreSqlBulkInsertProvider>>() ?? new ExecuteInsertOptionsExtension<PostgreSqlBulkInsertProvider>();
16+
var extension = optionsBuilder.Options.FindExtension<BulkInsertOptionsExtension<PostgreSqlBulkInsertProvider>>() ?? new BulkInsertOptionsExtension<PostgreSqlBulkInsertProvider>();
1717

1818
((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension);
1919

src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerDbContextOptionsExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public static class SqlServerDbContextOptionsExtensions
1111
/// <summary>
1212
/// Configures the DbContext to use the SQL Server bulk insert provider.
1313
/// </summary>
14-
public static DbContextOptionsBuilder UseExecuteInsertSqlServer(this DbContextOptionsBuilder optionsBuilder)
14+
public static DbContextOptionsBuilder UseBulkInsertSqlServer(this DbContextOptionsBuilder optionsBuilder)
1515
{
16-
var extension = optionsBuilder.Options.FindExtension<ExecuteInsertOptionsExtension<SqlServerBulkInsertProvider>>() ?? new ExecuteInsertOptionsExtension<SqlServerBulkInsertProvider>();
16+
var extension = optionsBuilder.Options.FindExtension<BulkInsertOptionsExtension<SqlServerBulkInsertProvider>>() ?? new BulkInsertOptionsExtension<SqlServerBulkInsertProvider>();
1717

1818
((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension);
1919

src/PhenX.EntityFrameworkCore.BulkInsert.Sqlite/SqliteDbContextOptionsExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public static class SqliteDbContextOptionsExtensions
1111
/// <summary>
1212
/// Configures the DbContext to use the SQLite bulk insert provider.
1313
/// </summary>
14-
public static DbContextOptionsBuilder UseExecuteInsertSqlite(this DbContextOptionsBuilder optionsBuilder)
14+
public static DbContextOptionsBuilder UseBulkInsertSqlite(this DbContextOptionsBuilder optionsBuilder)
1515
{
16-
var extension = optionsBuilder.Options.FindExtension<ExecuteInsertOptionsExtension<SqliteBulkInsertProvider>>() ?? new ExecuteInsertOptionsExtension<SqliteBulkInsertProvider>();
16+
var extension = optionsBuilder.Options.FindExtension<BulkInsertOptionsExtension<SqliteBulkInsertProvider>>() ?? new BulkInsertOptionsExtension<SqliteBulkInsertProvider>();
1717
((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension);
1818
return optionsBuilder;
1919
}

src/PhenX.EntityFrameworkCore.BulkInsert/ExecuteInsertOptionsExtension.cs renamed to src/PhenX.EntityFrameworkCore.BulkInsert/BulkInsertOptionsExtension.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
namespace PhenX.EntityFrameworkCore.BulkInsert;
77

8-
internal class ExecuteInsertOptionsExtension<TProvider> : IDbContextOptionsExtension
8+
internal class BulkInsertOptionsExtension<TProvider> : IDbContextOptionsExtension
99
where TProvider : class, IBulkInsertProvider
1010
{
1111
public DbContextOptionsExtensionInfo Info
12-
=> new ExecuteInsertOptionsExtensionInfo(this);
12+
=> new BulkInsertOptionsExtensionInfo(this);
1313

1414
public void ApplyServices(IServiceCollection services)
1515
{
@@ -20,9 +20,9 @@ public void Validate(IDbContextOptions options)
2020
{
2121
}
2222

23-
private class ExecuteInsertOptionsExtensionInfo : DbContextOptionsExtensionInfo
23+
private class BulkInsertOptionsExtensionInfo : DbContextOptionsExtensionInfo
2424
{
25-
public ExecuteInsertOptionsExtensionInfo(IDbContextOptionsExtension extension)
25+
public BulkInsertOptionsExtensionInfo(IDbContextOptionsExtension extension)
2626
: base(extension) { }
2727

2828
/// <inheritdoc />
@@ -35,7 +35,7 @@ public ExecuteInsertOptionsExtensionInfo(IDbContextOptionsExtension extension)
3535
public override bool IsDatabaseProvider => false;
3636

3737
/// <inheritdoc />
38-
public override string LogFragment => "ExecuteInsertOptionsExtension";
38+
public override string LogFragment => "BulkInsertOptionsExtension";
3939

4040
/// <inheritdoc />
4141
public override void PopulateDebugInfo(IDictionary<string, string> debugInfo)

src/PhenX.EntityFrameworkCore.BulkInsert/Extensions/DbSetExtensions.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public static class DbSetExtensions
1414
/// <summary>
1515
/// Executes a bulk insert operation returning the inserted/updated entities, from the DbSet.
1616
/// </summary>
17-
public static async Task<List<T>> ExecuteInsertReturnEntitiesAsync<T>(
17+
public static async Task<List<T>> ExecuteBulkInsertReturnEntitiesAsync<T>(
1818
this DbSet<T> dbSet,
1919
IEnumerable<T> entities,
2020
Action<BulkInsertOptions>? configure = null,
@@ -30,21 +30,21 @@ public static async Task<List<T>> ExecuteInsertReturnEntitiesAsync<T>(
3030
/// <summary>
3131
/// Executes a bulk insert operation returning the inserted/updated entities, from the DbContext.
3232
/// </summary>
33-
public static async Task<List<T>> ExecuteInsertReturnEntitiesAsync<T>(this DbContext dbContext, IEnumerable<T> entities, Action<BulkInsertOptions>? configure = null, OnConflictOptions? onConflict = null, CancellationToken cancellationToken = default) where T : class
33+
public static async Task<List<T>> ExecuteBulkInsertReturnEntitiesAsync<T>(this DbContext dbContext, IEnumerable<T> entities, Action<BulkInsertOptions>? configure = null, OnConflictOptions? onConflict = null, CancellationToken cancellationToken = default) where T : class
3434
{
3535
var dbSet = dbContext.Set<T>();
3636
if (dbSet == null)
3737
{
3838
throw new InvalidOperationException($"DbSet of type {typeof(T).Name} not found in DbContext.");
3939
}
4040

41-
return await dbSet.ExecuteInsertReturnEntitiesAsync(entities, configure, onConflict, cancellationToken);
41+
return await dbSet.ExecuteBulkInsertReturnEntitiesAsync(entities, configure, onConflict, cancellationToken);
4242
}
4343

4444
/// <summary>
4545
/// Executes a bulk insert operation without returning the inserted/updated entities, from the DbSet.
4646
/// </summary>
47-
public static async Task ExecuteInsertAsync<T>(
47+
public static async Task ExecuteBulkInsertAsync<T>(
4848
this DbSet<T> dbSet,
4949
IEnumerable<T> entities,
5050
Action<BulkInsertOptions>? configure = null,
@@ -60,21 +60,21 @@ public static async Task ExecuteInsertAsync<T>(
6060
/// <summary>
6161
/// Executes a bulk insert operation without returning the inserted/updated entities, from the DbContext.
6262
/// </summary>
63-
public static async Task ExecuteInsertAsync<T>(this DbContext dbContext, IEnumerable<T> entities, Action<BulkInsertOptions>? configure = null, OnConflictOptions? onConflict = null, CancellationToken cancellationToken = default) where T : class
63+
public static async Task ExecuteBulkInsertAsync<T>(this DbContext dbContext, IEnumerable<T> entities, Action<BulkInsertOptions>? configure = null, OnConflictOptions? onConflict = null, CancellationToken cancellationToken = default) where T : class
6464
{
6565
var dbSet = dbContext.Set<T>();
6666
if (dbSet == null)
6767
{
6868
throw new InvalidOperationException($"DbSet of type {typeof(T).Name} not found in DbContext.");
6969
}
7070

71-
await dbSet.ExecuteInsertAsync(entities, configure, onConflict, cancellationToken);
71+
await dbSet.ExecuteBulkInsertAsync(entities, configure, onConflict, cancellationToken);
7272
}
7373

7474
/// <summary>
7575
/// Executes a bulk insert operation returning the inserted/updated entities, from the DbSet (synchronous variant).
7676
/// </summary>
77-
public static List<T> ExecuteInsertReturnEntities<T>(
77+
public static List<T> ExecuteBulkInsertReturnEntities<T>(
7878
this DbSet<T> dbSet,
7979
IEnumerable<T> entities,
8080
Action<BulkInsertOptions>? configure = null,
@@ -89,7 +89,7 @@ public static List<T> ExecuteInsertReturnEntities<T>(
8989
/// <summary>
9090
/// Executes a bulk insert operation returning the inserted/updated entities, from the DbContext (synchronous variant).
9191
/// </summary>
92-
public static List<T> ExecuteInsertReturnEntities<T>(
92+
public static List<T> ExecuteBulkInsertReturnEntities<T>(
9393
this DbContext dbContext,
9494
IEnumerable<T> entities,
9595
Action<BulkInsertOptions>? configure = null,
@@ -102,13 +102,13 @@ public static List<T> ExecuteInsertReturnEntities<T>(
102102
throw new InvalidOperationException($"DbSet of type {typeof(T).Name} not found in DbContext.");
103103
}
104104

105-
return dbSet.ExecuteInsertReturnEntities(entities, configure, onConflict);
105+
return dbSet.ExecuteBulkInsertReturnEntities(entities, configure, onConflict);
106106
}
107107

108108
/// <summary>
109109
/// Executes a bulk insert operation without returning the inserted/updated entities, from the DbSet (synchronous variant).
110110
/// </summary>
111-
public static void ExecuteInsert<T>(
111+
public static void ExecuteBulkInsert<T>(
112112
this DbSet<T> dbSet,
113113
IEnumerable<T> entities,
114114
Action<BulkInsertOptions>? configure = null,
@@ -123,7 +123,7 @@ public static void ExecuteInsert<T>(
123123
/// <summary>
124124
/// Executes a bulk insert operation without returning the inserted/updated entities, from the DbContext (synchronous variant).
125125
/// </summary>
126-
public static void ExecuteInsert<T>(
126+
public static void ExecuteBulkInsert<T>(
127127
this DbContext dbContext,
128128
IEnumerable<T> entities,
129129
Action<BulkInsertOptions>? configure = null,
@@ -136,7 +136,7 @@ public static void ExecuteInsert<T>(
136136
throw new InvalidOperationException($"DbSet of type {typeof(T).Name} not found in DbContext.");
137137
}
138138

139-
dbSet.ExecuteInsert(entities, configure, onConflict);
139+
dbSet.ExecuteBulkInsert(entities, configure, onConflict);
140140
}
141141

142142
private static DbContext GetDbContext<T>(this DbSet<T> dbSet) where T : class

tests/PhenX.EntityFrameworkCore.BulkInsert.Benchmark/LibComparator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ protected virtual string GetConnectionString()
6060
[Benchmark(Baseline = true)]
6161
public async Task PhenX_EntityFrameworkCore_BulkInsert()
6262
{
63-
await DbContext.ExecuteInsertAsync(data);
63+
await DbContext.ExecuteBulkInsertAsync(data);
6464
}
6565
//
6666
// [Benchmark]
6767
// public void PhenX_EntityFrameworkCore_BulkInsert_Sync()
6868
// {
69-
// DbContext.ExecuteInsert(data);
69+
// DbContext.ExecuteBulkInsert(data);
7070
// }
7171

7272
[Benchmark]

tests/PhenX.EntityFrameworkCore.BulkInsert.Benchmark/LibComparatorPostgreSql.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ protected override void ConfigureDbContext()
2222

2323
DbContext = new TestDbContext(p => p
2424
.UseNpgsql(connectionString)
25-
.UseExecuteInsertPostgreSql()
25+
.UseBulkInsertPostgreSql()
2626
);
2727
}
2828

tests/PhenX.EntityFrameworkCore.BulkInsert.Benchmark/LibComparatorSqlServer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
using Microsoft.EntityFrameworkCore;
77

8+
using PhenX.EntityFrameworkCore.BulkInsert.Sqlite;
89
using PhenX.EntityFrameworkCore.BulkInsert.SqlServer;
910

1011
using Testcontainers.MsSql;
@@ -22,7 +23,7 @@ protected override void ConfigureDbContext()
2223

2324
DbContext = new TestDbContext(p => p
2425
.UseSqlServer(connectionString)
25-
.UseExecuteInsertSqlServer()
26+
.UseBulkInsertSqlServer()
2627
);
2728
}
2829

tests/PhenX.EntityFrameworkCore.BulkInsert.Benchmark/LibComparatorSqlite.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected override void ConfigureDbContext()
2020

2121
DbContext = new TestDbContext(p => p
2222
.UseSqlite(connectionString)
23-
.UseExecuteInsertSqlite()
23+
.UseBulkInsertSqlite()
2424
);
2525
}
2626

0 commit comments

Comments
 (0)