Skip to content

Assignment of complex type does not assign nested properties correctly #37395

@roji

Description

@roji

The following test:

public virtual Task Update_associate_to_another_associate()
    => AssertUpdate(
        ss => ss.Set<RootEntity>(),
        c => c,
        s => s.SetProperty(x => x.OptionalAssociate, x => x.RequiredAssociate),
        rowsAffectedCount: 7);

Currently generates the following SQL:

UPDATE [r]
SET [r].[OptionalAssociate_Id] = [r].[RequiredAssociate_Id],
    [r].[OptionalAssociate_Int] = [r].[RequiredAssociate_Int],
    [r].[OptionalAssociate_Ints] = [r].[RequiredAssociate_Ints],
    [r].[OptionalAssociate_Name] = [r].[RequiredAssociate_Name],
    [r].[OptionalAssociate_String] = [r].[RequiredAssociate_String],
    [r].[OptionalAssociate_OptionalNestedAssociate_Id] = [r].[OptionalAssociate_OptionalNestedAssociate_Id],
    [r].[OptionalAssociate_OptionalNestedAssociate_Int] = [r].[OptionalAssociate_OptionalNestedAssociate_Int],
    [r].[OptionalAssociate_OptionalNestedAssociate_Ints] = [r].[OptionalAssociate_OptionalNestedAssociate_Ints],
    [r].[OptionalAssociate_OptionalNestedAssociate_Name] = [r].[OptionalAssociate_OptionalNestedAssociate_Name],
    [r].[OptionalAssociate_OptionalNestedAssociate_String] = [r].[OptionalAssociate_OptionalNestedAssociate_String],
    [r].[OptionalAssociate_RequiredNestedAssociate_Id] = [r].[OptionalAssociate_RequiredNestedAssociate_Id],
    [r].[OptionalAssociate_RequiredNestedAssociate_Int] = [r].[OptionalAssociate_RequiredNestedAssociate_Int],
    [r].[OptionalAssociate_RequiredNestedAssociate_Ints] = [r].[OptionalAssociate_RequiredNestedAssociate_Ints],
    [r].[OptionalAssociate_RequiredNestedAssociate_Name] = [r].[OptionalAssociate_RequiredNestedAssociate_Name],
    [r].[OptionalAssociate_RequiredNestedAssociate_String] = [r].[OptionalAssociate_RequiredNestedAssociate_String]
FROM [RootEntity] AS [r]

Note that in the bottom setters, the column from OptionalAssociate is being assigned to itself - the right side needs to be from RequiredAssociate. This is the same bug as #37391 but for ExecuteUpdate complex type assignment, instead of comparison.

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions