Skip to content

Commit a6e9f7e

Browse files
authored
Call appropriate assign method in JSON shaper (#31651)
1 parent 6c5d663 commit a6e9f7e

File tree

8 files changed

+46
-17
lines changed

8 files changed

+46
-17
lines changed

src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,9 +2009,8 @@ protected override Expression VisitBinary(BinaryExpression node)
20092009
var currentVariable = Variable(parameter!.Type);
20102010
return Block(
20112011
new[] { currentVariable },
2012-
Assign(
2013-
currentVariable,
2014-
MakeMemberAccess(_instance, property.GetMemberInfo(forMaterialization: true, forSet: false))),
2012+
MakeMemberAccess(_instance, property.GetMemberInfo(forMaterialization: true, forSet: false))
2013+
.Assign(currentVariable),
20152014
IfThenElse(
20162015
OrElse(
20172016
ReferenceEqual(currentVariable, Constant(null)),
@@ -2024,7 +2023,11 @@ protected override Expression VisitBinary(BinaryExpression node)
20242023
));
20252024
}
20262025

2027-
return MakeBinary(node.NodeType, Visit(node.Left), parameter!);
2026+
var visitedLeft = Visit(node.Left);
2027+
return node.NodeType == ExpressionType.Assign
2028+
&& visitedLeft is MemberExpression memberExpression
2029+
? memberExpression.Assign(parameter!)
2030+
: MakeBinary(node.NodeType, visitedLeft, parameter!);
20282031
}
20292032

20302033
return base.VisitBinary(node);

test/EFCore.Relational.Specification.Tests/Query/JsonQueryFixtureBase.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
471471
{
472472
modelBuilder.Entity<JsonEntityBasic>().Property(x => x.Id).ValueGeneratedNever();
473473
modelBuilder.Entity<EntityBasic>().Property(x => x.Id).ValueGeneratedNever();
474-
modelBuilder.Entity<JsonEntityBasicForReference>().Property(x => x.Id).ValueGeneratedNever();
474+
modelBuilder.Entity<JsonEntityBasicForReference>(
475+
b =>
476+
{
477+
b.Property(x => x.Id).ValueGeneratedNever();
478+
b.Property(x => x.Name);
479+
});
480+
475481
modelBuilder.Entity<JsonEntityBasicForCollection>().Property(x => x.Id).ValueGeneratedNever();
476482
modelBuilder.Entity<JsonEntityBasic>().OwnsOne(
477483
x => x.OwnedReferenceRoot, b =>

test/EFCore.Relational.Specification.Tests/TestModels/JsonQuery/JsonEntityAllTypes.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ public class JsonEntityAllTypes
1919
private Collection<JsonEnum?> _testNullableEnumWithIntConverterCollectionX = new() { JsonEnum.Three };
2020

2121
public int Id { get; set; }
22-
public JsonOwnedAllTypes Reference { get; set; }
23-
public List<JsonOwnedAllTypes> Collection { get; set; }
22+
public JsonOwnedAllTypes Reference { get; init; }
23+
public List<JsonOwnedAllTypes> Collection { get; init; }
2424

25-
public string[] TestDefaultStringCollection { get; set; }
26-
public List<string> TestMaxLengthStringCollection { get; set; }
25+
public string[] TestDefaultStringCollection { get; init; }
26+
public List<string> TestMaxLengthStringCollection { get; init; }
2727
public IList<short> TestInt16Collection { get; set; }
2828

2929
public int[] TestInt32Collection { get; set; } = Array.Empty<int>();

test/EFCore.Relational.Specification.Tests/TestModels/JsonQuery/JsonEntityBasicForCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace Microsoft.EntityFrameworkCore.TestModels.JsonQuery;
55

66
public class JsonEntityBasicForCollection
77
{
8-
public int Id { get; set; }
9-
public string Name { get; set; }
8+
public int Id { get; init; }
9+
public string Name { get; init; }
1010

1111
public int? ParentId { get; set; }
1212
public JsonEntityBasic Parent { get; set; }

test/EFCore.Relational.Specification.Tests/TestModels/JsonQuery/JsonEntityBasicForReference.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ namespace Microsoft.EntityFrameworkCore.TestModels.JsonQuery;
55

66
public class JsonEntityBasicForReference
77
{
8-
public int Id { get; set; }
9-
public string Name { get; set; }
8+
private int _id;
9+
private string _name;
10+
11+
public int Id
12+
=> _id;
13+
14+
public string Name
15+
=> _name;
1016

1117
public int? ParentId { get; set; }
1218
public JsonEntityBasic Parent { get; set; }
19+
20+
public void SetIdAndName(int id, string name)
21+
{
22+
_id = id;
23+
_name = name;
24+
}
1325
}

test/EFCore.Relational.Specification.Tests/TestModels/JsonQuery/JsonOwnedBranch.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ public class JsonOwnedBranch
99
public decimal Fraction { get; set; }
1010

1111
public JsonEnum Enum { get; set; }
12-
public JsonEnum? NullableEnum { get; set; }
13-
public JsonEnum[] Enums { get; set; }
14-
public JsonEnum?[] NullableEnums { get; set; }
12+
public JsonEnum? NullableEnum { get; init; }
13+
public JsonEnum[] Enums { get; init; }
14+
public JsonEnum?[] NullableEnums { get; init; }
1515

1616
public JsonOwnedLeaf OwnedReferenceLeaf { get; set; }
1717
public List<JsonOwnedLeaf> OwnedCollectionLeaf { get; set; }

test/EFCore.Relational.Specification.Tests/TestModels/JsonQuery/JsonQueryData.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,8 @@ public static IReadOnlyList<EntityBasic> CreateEntitiesBasic()
329329

330330
public static IReadOnlyList<JsonEntityBasicForReference> CreateJsonEntitiesBasicForReference()
331331
{
332-
var entity1 = new JsonEntityBasicForReference { Id = 1, Name = "EntityReference1" };
332+
var entity1 = new JsonEntityBasicForReference();
333+
entity1.SetIdAndName(1, "EntityReference1");
333334

334335
return new List<JsonEntityBasicForReference> { entity1 };
335336
}

test/EFCore.Relational.Specification.Tests/Update/JsonUpdateFixtureBase.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
192192
x => x == true ? "Y" : "N"));
193193
});
194194

195+
modelBuilder.Entity<JsonEntityBasicForReference>(
196+
b =>
197+
{
198+
b.Property(x => x.Id);
199+
b.Property(x => x.Name);
200+
});
201+
195202
base.OnModelCreating(modelBuilder, context);
196203
}
197204

0 commit comments

Comments
 (0)