Skip to content

Commit f9a8d62

Browse files
committed
v10.0.0 Upgrade to .Net 10 and EntityFrameworkCore 10
1 parent 1ca6086 commit f9a8d62

File tree

12 files changed

+104
-52
lines changed

12 files changed

+104
-52
lines changed

src/MockQueryable/MockQueryable.Core/MockQueryable.Core.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<PackageId>MockQueryable.Core</PackageId>
66
<Authors>Roman Titov</Authors>
77
<Description>
@@ -14,11 +14,11 @@
1414
<PackageTags>Mock EntityFrameworkCore Queryable mock EF UnitTests EntityFrameworkCore</PackageTags>
1515
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1616
<PackageReleaseNotes>
17-
Upgrade to .Net 9 and EntityFrameworkCore 9
17+
Upgrade to .Net 10 and EntityFrameworkCore 10
1818
</PackageReleaseNotes>
19-
<Version>9.0.0</Version>
20-
<AssemblyVersion>9.0.0.0</AssemblyVersion>
21-
<FileVersion>9.0.0.0</FileVersion>
19+
<Version>10.0.0</Version>
20+
<AssemblyVersion>10.0.0.0</AssemblyVersion>
21+
<FileVersion>10.0.0.0</FileVersion>
2222
<Company></Company>
2323
<PackageLicenseFile>LICENSE</PackageLicenseFile>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>

src/MockQueryable/MockQueryable.EntityFrameworkCore/MockQueryable.EntityFrameworkCore.csproj

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<PackageId>MockQueryable.EntityFrameworkCore</PackageId>
66
<Authors>Roman Titov</Authors>
77
<Description>
@@ -14,11 +14,11 @@
1414
<PackageTags>Mock EntityFrameworkCore Queryable mock EF UnitTests EntityFrameworkCore</PackageTags>
1515
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1616
<PackageReleaseNotes>
17-
Upgrade to .Net 9 and EntityFrameworkCore 9
17+
Upgrade to .Net 10 and EntityFrameworkCore 10
1818
</PackageReleaseNotes>
19-
<Version>9.0.0</Version>
20-
<AssemblyVersion>9.0.0.0</AssemblyVersion>
21-
<FileVersion>9.0.0.0</FileVersion>
19+
<Version>10.0.0</Version>
20+
<AssemblyVersion>10.0.0.0</AssemblyVersion>
21+
<FileVersion>10.0.0.0</FileVersion>
2222
<Company></Company>
2323
<PackageLicenseFile>LICENSE</PackageLicenseFile>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -44,8 +44,8 @@
4444
</None>
4545
</ItemGroup>
4646
<ItemGroup>
47-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.9" />
48-
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.9" />
47+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.0" />
48+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.0" />
4949
</ItemGroup>
5050

5151
<ItemGroup>

src/MockQueryable/MockQueryable.EntityFrameworkCore/TestQueryProviderEfCore.cs

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using System.Linq.Expressions;
8+
using System.Reflection;
9+
using System.Runtime.CompilerServices;
810
using System.Threading;
911
using System.Threading.Tasks;
1012

@@ -92,29 +94,78 @@ public IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToke
9294
private static void ApplyUpdateChangesToDbSet(IEnumerable<T> affectedItems,
9395
MethodCallExpression methodCallExpression)
9496
{
95-
// Extract the update lambda: opt => opt.SetProperty(...)
96-
if ((methodCallExpression.Arguments[1] as UnaryExpression)?.Operand is not LambdaExpression updateLambda)
97+
98+
if (methodCallExpression.Arguments[1] is not NewArrayExpression arrayExpr)
9799
{
98100
return;
99101
}
100102

101-
// The body may be a chain of MethodCallExpressions
102-
var currentCall = updateLambda.Body as MethodCallExpression;
103-
while (currentCall is { Method.Name: nameof(SetPropertyCalls<T>.SetProperty) })
104-
{
105-
var memberExpr = currentCall.Arguments[0] as LambdaExpression;
106-
var valueExpr = currentCall.Arguments[1];
107-
108-
var propertyInfo = ((memberExpr.Body as MemberExpression)?.Member) as System.Reflection.PropertyInfo;
109-
var value = Expression.Lambda(valueExpr).Compile().DynamicInvoke();
110103

111-
foreach (var item in affectedItems)
104+
foreach (var element in arrayExpr.Expressions.Cast<NewExpression>())
105+
{
106+
var lambdaExpr = ExtractLambda(element.Arguments[0]);
107+
if (element.Arguments[1] is ConstantExpression constExpr)
112108
{
113-
propertyInfo?.SetValue(item, value);
109+
var value = constExpr.Value;
110+
111+
foreach (var item in affectedItems)
112+
{
113+
SetProperty(item, lambdaExpr, value);
114+
}
114115
}
116+
117+
118+
}
119+
120+
121+
}
122+
123+
private static LambdaExpression ExtractLambda(Expression expr)
124+
{
125+
126+
if (expr is UnaryExpression { NodeType: ExpressionType.Quote } unary)
127+
{
128+
expr = unary.Operand;
129+
}
130+
131+
if (expr is UnaryExpression { NodeType: ExpressionType.Convert } unary2)
132+
{
133+
expr = unary2.Operand;
134+
}
135+
136+
return expr as LambdaExpression;
137+
}
138+
139+
140+
141+
private static void SetProperty(T item, LambdaExpression lambda, object value)
142+
{
143+
var body = lambda.Body;
144+
115145

116-
// Move to the next chained call (if any)
117-
currentCall = currentCall.Object as MethodCallExpression;
146+
if (body is UnaryExpression { NodeType: ExpressionType.Convert } unary)
147+
{
148+
body = unary.Operand;
149+
}
150+
151+
if (body is not MemberExpression memberExpr)
152+
{
153+
return;
118154
}
155+
156+
if (memberExpr.Member is not PropertyInfo prop)
157+
{
158+
return;
159+
}
160+
161+
var converted = value;
162+
163+
if (value != null && !prop.PropertyType.IsInstanceOfType(value))
164+
{
165+
converted = Convert.ChangeType(value, prop.PropertyType);
166+
}
167+
168+
prop.SetValue(item, converted);
119169
}
170+
120171
}

src/MockQueryable/MockQueryable.FakeItEasy/MockQueryable.FakeItEasy.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<PackageId>MockQueryable.FakeItEasy</PackageId>
66
<Authors>Roman Titov</Authors>
77
<Description>
@@ -14,11 +14,11 @@
1414
<PackageTags>Mock EntityFrameworkCore Queryable mock EF UnitTests EntityFrameworkCore</PackageTags>
1515
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1616
<PackageReleaseNotes>
17-
Upgrade to .Net 9 and EntityFrameworkCore 9
17+
Upgrade to .Net 10 and EntityFrameworkCore 10
1818
</PackageReleaseNotes>
19-
<Version>9.0.0</Version>
20-
<AssemblyVersion>9.0.0.0</AssemblyVersion>
21-
<FileVersion>9.0.0.0</FileVersion>
19+
<Version>10.0.0</Version>
20+
<AssemblyVersion>10.0.0.0</AssemblyVersion>
21+
<FileVersion>10.0.0.0</FileVersion>
2222
<Company></Company>
2323
<PackageLicenseFile>LICENSE</PackageLicenseFile>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>

src/MockQueryable/MockQueryable.Moq/MockQueryable.Moq.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<PackageId>MockQueryable.Moq</PackageId>
66
<Authors>Roman Titov</Authors>
77
<Description>
@@ -14,11 +14,11 @@
1414
<PackageTags>Mock EntityFrameworkCore Queryable mock EF UnitTests EntityFrameworkCore</PackageTags>
1515
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1616
<PackageReleaseNotes>
17-
Upgrade to .Net 9 and EntityFrameworkCore 9
17+
Upgrade to .Net 10 and EntityFrameworkCore 10
1818
</PackageReleaseNotes>
19-
<Version>9.0.0</Version>
20-
<AssemblyVersion>9.0.0.0</AssemblyVersion>
21-
<FileVersion>9.0.0.0</FileVersion>
19+
<Version>10.0.0</Version>
20+
<AssemblyVersion>10.0.0.0</AssemblyVersion>
21+
<FileVersion>10.0.0.0</FileVersion>
2222
<Company></Company>
2323
<PackageLicenseFile>LICENSE</PackageLicenseFile>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>

src/MockQueryable/MockQueryable.NSubstitute/MockQueryable.NSubstitute.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<PackageId>MockQueryable.NSubstitute</PackageId>
66
<Authors>Roman Titov</Authors>
77
<Description>
@@ -14,11 +14,11 @@
1414
<PackageTags>Mock EntityFrameworkCore Queryable mock EF UnitTests EntityFrameworkCore</PackageTags>
1515
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1616
<PackageReleaseNotes>
17-
Upgrade to .Net 9 and EntityFrameworkCore 9
17+
Upgrade to .Net 10 and EntityFrameworkCore 10
1818
</PackageReleaseNotes>
19-
<Version>9.0.0</Version>
20-
<AssemblyVersion>9.0.0.0</AssemblyVersion>
21-
<FileVersion>9.0.0.0</FileVersion>
19+
<Version>10.0.0</Version>
20+
<AssemblyVersion>10.0.0.0</AssemblyVersion>
21+
<FileVersion>10.0.0.0</FileVersion>
2222
<Company></Company>
2323
<PackageLicenseFile>LICENSE</PackageLicenseFile>
2424
<PackageReadmeFile>README.md</PackageReadmeFile>

src/MockQueryable/MockQueryable.Sample/MockQueryable.Sample.csproj

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
</PropertyGroup>
66

77
<ItemGroup>
88
<None Include="SampleLikeExpressionVisitor.cs" />
99
</ItemGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="AutoMapper" Version="15.0.1" />
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
14-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
12+
<PackageReference Include="AutoMapper" Version="15.1.0" />
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
14+
<!--<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />-->
1515
<PackageReference Include="NUnit" Version="4.4.0" />
1616
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0">
1717
<PrivateAssets>all</PrivateAssets>
1818
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1919
</PackageReference>
20-
<PackageReference Include="System.Linq.Async" Version="6.0.3" />
2120
</ItemGroup>
2221

2322
<ItemGroup>

src/MockQueryable/MockQueryable.Sample/MyServiceFakeItEasyTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public void GetUsersByLastName_ExpressionVisitorMissing_ThrowsException()
257257
Assert.That(
258258
exception.Message,
259259
Is.EqualTo(
260-
"The 'ILike' method is not supported because the query has switched to client-evaluation. " +
260+
"The 'Like' method is not supported because the query has switched to client-evaluation. " +
261261
"This usually happens when the arguments to the method cannot be translated to server. " +
262262
"Rewrite the query to avoid client evaluation of arguments so that method can be translated to server."));
263263
}

src/MockQueryable/MockQueryable.Sample/MyServiceMoqTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ public void GetUsersByLastName_ExpressionVisitorMissing_ThrowsException()
297297
Assert.That(
298298
exception.Message,
299299
Is.EqualTo(
300-
"The 'ILike' method is not supported because the query has switched to client-evaluation. " +
300+
"The 'Like' method is not supported because the query has switched to client-evaluation. " +
301301
"This usually happens when the arguments to the method cannot be translated to server. " +
302302
"Rewrite the query to avoid client evaluation of arguments so that method can be translated to server."));
303303
}

src/MockQueryable/MockQueryable.Sample/MyServiceNSubstituteTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ public void GetUsersByLastName_ExpressionVisitorMissing_ThrowsException()
335335
Assert.That(
336336
exception.Message,
337337
Is.EqualTo(
338-
"The 'ILike' method is not supported because the query has switched to client-evaluation. " +
338+
"The 'Like' method is not supported because the query has switched to client-evaluation. " +
339339
"This usually happens when the arguments to the method cannot be translated to server. " +
340340
"Rewrite the query to avoid client evaluation of arguments so that method can be translated to server."));
341341
}

0 commit comments

Comments
 (0)