Skip to content

Commit e9ef3e7

Browse files
Fix.
1 parent 37b32a7 commit e9ef3e7

4 files changed

Lines changed: 17 additions & 4 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public SqlServerBulkInsertProvider(ILogger<SqlServerBulkInsertProvider>? logger
2222

2323
//language=sql
2424
/// <inheritdoc />
25-
protected override string AddTableCopyBulkInsertId => $"ALTER TABLE {{0}} ADD {BulkInsertId} INT IDENTITY PRIMARY KEY;";
25+
protected override string AddTableCopyBulkInsertId => $"ALTER TABLE {{0}} ADD {BulkInsertId} INT;";
2626

2727
/// <inheritdoc />
2828
protected override string GetTempTableName(string tableName) => $"#_temp_bulk_insert_{tableName}";
@@ -48,7 +48,7 @@ CancellationToken ctk
4848

4949
foreach (var prop in properties)
5050
{
51-
bulkCopy.ColumnMappings.Add(prop.Name, SqlDialect.Quote(prop.ColumnName));
51+
bulkCopy.ColumnMappings.Add(prop.Name, prop.ColumnName);
5252
}
5353

5454
if (sync)

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ public override string BuildMoveDataSql<T>(DbContext context, string source,
3131

3232
var q = new StringBuilder();
3333

34+
if (options.CopyGeneratedColumns)
35+
{
36+
q.AppendLine($"SET IDENTITY_INSERT {target} ON;");
37+
}
38+
3439
// Merge handling
3540
if (onConflict is OnConflictOptions<T> onConflictTyped && onConflictTyped.Match != null)
3641
{
@@ -79,6 +84,11 @@ public override string BuildMoveDataSql<T>(DbContext context, string source,
7984

8085
q.AppendLine(";");
8186

87+
if (options.CopyGeneratedColumns)
88+
{
89+
q.AppendLine($"SET IDENTITY_INSERT {target} OFF;");
90+
}
91+
8292
return q.ToString();
8393
}
8494

src/PhenX.EntityFrameworkCore.BulkInsert/BulkInsertProviderBase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@ protected BulkInsertProviderBase(ILogger<BulkInsertProviderBase<TDialect>>? logg
3131
protected async Task<string> CreateTableCopyAsync<T>(
3232
bool sync,
3333
DbContext context,
34+
BulkInsertOptions options,
3435
CancellationToken cancellationToken = default) where T : class
3536
{
3637
var tableInfo = GetTableInfo(context, typeof(T));
3738
var tableName = QuoteTableName(tableInfo.SchemaName, tableInfo.TableName);
3839
var tempTableName = QuoteTableName(null, GetTempTableName(tableInfo.TableName));
3940

40-
var keptColumns = string.Join(", ", GetQuotedColumns(context, typeof(T), false));
41+
var keptColumns = string.Join(", ", GetQuotedColumns(context, typeof(T), options.CopyGeneratedColumns));
4142
var query = string.Format(CreateTableCopySql, tempTableName, tableName, keptColumns);
4243

4344
await ExecuteAsync(sync, context, query, cancellationToken);
@@ -234,7 +235,7 @@ public async Task BulkInsert<T>(
234235
var (connection, wasClosed, transaction, wasBegan) = await context.GetConnection(sync, ctk);
235236

236237
var tableName = tempTableRequired
237-
? await CreateTableCopyAsync<T>(sync, context, ctk)
238+
? await CreateTableCopyAsync<T>(sync, context, options, ctk)
238239
: GetQuotedTableName(context, typeof(T));
239240

240241
var properties = context

tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public void InsertsEntitiesAndReturn_Sync()
116116
public async Task InsertsEntities_MultipleTimes()
117117
{
118118
Skip.If(_context.Database.ProviderName!.Contains("Postgres", StringComparison.InvariantCultureIgnoreCase));
119+
Skip.If(_context.Database.ProviderName!.Contains("SqlServer", StringComparison.InvariantCultureIgnoreCase));
119120

120121
// Arrange
121122
var entities = new List<TestEntity>
@@ -149,6 +150,7 @@ await _context.ExecuteBulkInsertAsync(entities,
149150
public async Task InsertsEntities_MultipleTimes_With_Conflict_On_Id()
150151
{
151152
Skip.If(_context.Database.ProviderName!.Contains("Postgres", StringComparison.InvariantCultureIgnoreCase));
153+
Skip.If(_context.Database.ProviderName!.Contains("SqlServer", StringComparison.InvariantCultureIgnoreCase));
152154

153155
// Arrange
154156
var entities = new List<TestEntity>

0 commit comments

Comments
 (0)