Skip to content

SQL aliases aren't uniquified in ExecuteUpdate setters #31078

@hexianggui

Description

@hexianggui

I use ExecuteUpdateAsync to update data, but it seems that the generated SQL statement has a problem. Here is the code:

var dbContext = await GetDbContextAsync();
var workQuery = dbContext.WorkOrders.Where(x => x.OrderCode == code);
await dbContext.Set<BomItem>()
    .Where(x => x.OrderCode == code)
    .ExecuteUpdateAsync(x =>
        x.SetProperty(s => s.HasWorkOrder, b => workQuery.Where(o => o.BomItemId == b.Id).Any()));

The incorrect SQL statement is:

2023-06-14_111842

The correct SQL statement should be:

UPDATE [m]
SET [m].[HasWorkOrder] = CASE
    WHEN EXISTS (
        SELECT 1
        FROM [MesWorkOrder] AS [m1]
        WHERE [m1].[OrderCode] = @__code_0 AND [m1].[BomItemId] = [m].[Id]) THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
END
FROM [MesBomItem] AS [m]
WHERE [m].[OrderCode] = @__code_0

EF Core version:
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: NET 7.0
Operating system:
IDE: Visual Studio 2022 17.6

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions