@@ -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