Skip to content

Commit 7e832c9

Browse files
committed
.Net 8
1 parent 392f67b commit 7e832c9

2 files changed

Lines changed: 38 additions & 9 deletions

File tree

src/ConnectionExtensionsExamples/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ await connection.BulkInsertAsync(configurationEntries,
135135
return new WhenNotMatchedBySourceAction
136136
{
137137
AndCondition = $"{ctx.GetTargetTableColumnWithAlias("Key")} LIKE 'Key%'",
138-
ThenAction = $"UPDATE SET {ctx.GetTargetTableColumnWithoutAlias("Key")} = 'xxx'"
138+
ThenAction = $"UPDATE SET {ctx.GetTargetTableColumnWithoutAlias("Key")} = @Key",
139+
Parameters = new { Key = "XXX" }
139140
};
140141
}
141142
});

src/EntityFrameworkCore.SqlServer.SimpleBulks/BulkMerge/BulkMergeBuilder.cs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ private string CreateJoinCondition(System.Data.DataTable dataTable)
111111
}));
112112
}
113113

114-
private string CreateWhenNotMatchedBySourceClause()
114+
private (string Clause, WhenNotMatchedBySourceAction? Action) CreateWhenNotMatchedBySourceClause()
115115
{
116116
if (_options.ConfigureWhenNotMatchedBySource == null)
117117
{
118-
return null;
118+
return (null, null);
119119
}
120120

121121
var context = new MergeContext
@@ -129,7 +129,7 @@ private string CreateWhenNotMatchedBySourceClause()
129129

130130
if (string.IsNullOrEmpty(action.ThenAction))
131131
{
132-
return null;
132+
return (null, null);
133133
}
134134

135135
var clause = new StringBuilder();
@@ -143,7 +143,7 @@ private string CreateWhenNotMatchedBySourceClause()
143143
clause.AppendLine();
144144
clause.AppendLine($" THEN {action.ThenAction}");
145145

146-
return clause.ToString();
146+
return (clause.ToString(), action);
147147
}
148148

149149
public BulkMergeResult Execute(IReadOnlyCollection<T> data)
@@ -153,7 +153,7 @@ public BulkMergeResult Execute(IReadOnlyCollection<T> data)
153153
return SingleMerge(data.First());
154154
}
155155

156-
var whenNotMatchedBySourceClause = CreateWhenNotMatchedBySourceClause();
156+
var (whenNotMatchedBySourceClause, whenNotMatchedBySourceAction) = CreateWhenNotMatchedBySourceClause();
157157

158158
if (!_updateColumnNames.Any() && !_insertColumnNames.Any() && string.IsNullOrEmpty(whenNotMatchedBySourceClause))
159159
{
@@ -241,6 +241,13 @@ public BulkMergeResult Execute(IReadOnlyCollection<T> data)
241241

242242
using (var updateCommand = _connectionContext.CreateTextCommand(sqlMergeStatement, _options))
243243
{
244+
var actionParameters = whenNotMatchedBySourceAction?.Parameters.ToSqlParameterInfors() ?? [];
245+
foreach (var param in actionParameters)
246+
{
247+
updateCommand.Parameters.Add(param.Parameter);
248+
}
249+
LogParameters(actionParameters);
250+
244251
using var reader = updateCommand.ExecuteReader();
245252

246253
while (reader.Read())
@@ -288,7 +295,7 @@ public BulkMergeResult Execute(IReadOnlyCollection<T> data)
288295

289296
public BulkMergeResult SingleMerge(T data)
290297
{
291-
var whenNotMatchedBySourceClause = CreateWhenNotMatchedBySourceClause();
298+
var (whenNotMatchedBySourceClause, whenNotMatchedBySourceAction) = CreateWhenNotMatchedBySourceClause();
292299

293300
if (!_updateColumnNames.Any() && !_insertColumnNames.Any() && string.IsNullOrEmpty(whenNotMatchedBySourceClause))
294301
{
@@ -363,6 +370,13 @@ public BulkMergeResult SingleMerge(T data)
363370
{
364371
LogParameters(_table.CreateSqlParameters(updateCommand, data, propertyNames, includeDiscriminator: true, autoAdd: true));
365372

373+
var actionParameters = whenNotMatchedBySourceAction?.Parameters.ToSqlParameterInfors() ?? [];
374+
foreach (var param in actionParameters)
375+
{
376+
updateCommand.Parameters.Add(param.Parameter);
377+
}
378+
LogParameters(actionParameters);
379+
366380
using var reader = updateCommand.ExecuteReader();
367381

368382
while (reader.Read())
@@ -423,7 +437,7 @@ public async Task<BulkMergeResult> ExecuteAsync(IReadOnlyCollection<T> data, Can
423437
return await SingleMergeAsync(data.First(), cancellationToken);
424438
}
425439

426-
var whenNotMatchedBySourceClause = CreateWhenNotMatchedBySourceClause();
440+
var (whenNotMatchedBySourceClause, whenNotMatchedBySourceAction) = CreateWhenNotMatchedBySourceClause();
427441

428442
if (!_updateColumnNames.Any() && !_insertColumnNames.Any() && string.IsNullOrEmpty(whenNotMatchedBySourceClause))
429443
{
@@ -511,6 +525,13 @@ public async Task<BulkMergeResult> ExecuteAsync(IReadOnlyCollection<T> data, Can
511525

512526
using (var updateCommand = _connectionContext.CreateTextCommand(sqlMergeStatement, _options))
513527
{
528+
var actionParameters = whenNotMatchedBySourceAction?.Parameters.ToSqlParameterInfors() ?? [];
529+
foreach (var param in actionParameters)
530+
{
531+
updateCommand.Parameters.Add(param.Parameter);
532+
}
533+
LogParameters(actionParameters);
534+
514535
using var reader = await updateCommand.ExecuteReaderAsync(cancellationToken);
515536

516537
while (await reader.ReadAsync(cancellationToken))
@@ -558,7 +579,7 @@ public async Task<BulkMergeResult> ExecuteAsync(IReadOnlyCollection<T> data, Can
558579

559580
public async Task<BulkMergeResult> SingleMergeAsync(T data, CancellationToken cancellationToken = default)
560581
{
561-
var whenNotMatchedBySourceClause = CreateWhenNotMatchedBySourceClause();
582+
var (whenNotMatchedBySourceClause, whenNotMatchedBySourceAction) = CreateWhenNotMatchedBySourceClause();
562583

563584
if (!_updateColumnNames.Any() && !_insertColumnNames.Any() && string.IsNullOrEmpty(whenNotMatchedBySourceClause))
564585
{
@@ -633,6 +654,13 @@ public async Task<BulkMergeResult> SingleMergeAsync(T data, CancellationToken ca
633654
{
634655
LogParameters(_table.CreateSqlParameters(updateCommand, data, propertyNames, includeDiscriminator: true, autoAdd: true));
635656

657+
var actionParameters = whenNotMatchedBySourceAction?.Parameters.ToSqlParameterInfors() ?? [];
658+
foreach (var param in actionParameters)
659+
{
660+
updateCommand.Parameters.Add(param.Parameter);
661+
}
662+
LogParameters(actionParameters);
663+
636664
using var reader = await updateCommand.ExecuteReaderAsync(cancellationToken);
637665

638666
while (await reader.ReadAsync(cancellationToken))

0 commit comments

Comments
 (0)