Skip to content

Commit 6c89e7a

Browse files
committed
Fix UpdateExpression.VisitChildren() to retain Tags
Fixes #36908
1 parent f99222d commit 6c89e7a

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

src/EFCore.Relational/Query/SqlExpressions/UpdateExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
117117

118118
return selectExpression == SelectExpression && table == Table && columnValueSetters is null
119119
? this
120-
: new UpdateExpression(table, selectExpression, columnValueSetters ?? ColumnValueSetters);
120+
: new UpdateExpression(table, selectExpression, columnValueSetters ?? ColumnValueSetters, Tags);
121121
}
122122

123123
/// <summary>

test/EFCore.Specification.Tests/BulkUpdates/NorthwindBulkUpdatesTestBase.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,16 @@ public virtual Task Update_Where_set_constant_TagWith(bool async)
362362
rowsAffectedCount: 8,
363363
(b, a) => Assert.All(a, c => Assert.Equal("Updated", c.ContactName)));
364364

365+
[ConditionalTheory, MemberData(nameof(IsAsyncData))]
366+
public virtual Task Update_set_constant_TagWith_null(bool async)
367+
=> AssertUpdate(
368+
async,
369+
ss => ss.Set<Customer>().TagWith("MyUpdate"),
370+
e => e,
371+
s => s.SetProperty(c => c.ContactName, (string)null),
372+
rowsAffectedCount: 91,
373+
(b, a) => Assert.All(a, c => Assert.Equal(null, c.ContactName)));
374+
365375
[ConditionalTheory, MemberData(nameof(IsAsyncData))]
366376
public virtual Task Update_Where_set_constant(bool async)
367377
=> AssertUpdate(

test/EFCore.SqlServer.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesSqlServerTest.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,20 @@ WHERE [c].[CustomerID] LIKE N'F%'
666666
""");
667667
}
668668

669+
public override async Task Update_set_constant_TagWith_null(bool async)
670+
{
671+
await base.Update_set_constant_TagWith_null(async);
672+
673+
AssertExecuteUpdateSql(
674+
"""
675+
-- MyUpdate
676+
677+
UPDATE [c]
678+
SET [c].[ContactName] = NULL
679+
FROM [Customers] AS [c]
680+
""");
681+
}
682+
669683
public override async Task Update_Where_set_constant(bool async)
670684
{
671685
await base.Update_Where_set_constant(async);

test/EFCore.Sqlite.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesSqliteTest.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,19 @@ public override async Task Update_Where_set_constant_TagWith(bool async)
648648
""");
649649
}
650650

651+
public override async Task Update_set_constant_TagWith_null(bool async)
652+
{
653+
await base.Update_set_constant_TagWith_null(async);
654+
655+
AssertExecuteUpdateSql(
656+
"""
657+
-- MyUpdate
658+
659+
UPDATE "Customers" AS "c"
660+
SET "ContactName" = NULL
661+
""");
662+
}
663+
651664
public override async Task Update_Where_set_constant(bool async)
652665
{
653666
await base.Update_Where_set_constant(async);

0 commit comments

Comments
 (0)