Skip to content

Commit 70eee87

Browse files
committed
Merge branch 'release/8.0'
2 parents e67506e + ecfc1ce commit 70eee87

File tree

73 files changed

+701
-748
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+701
-748
lines changed

src/EFCore.Cosmos/Query/Internal/CosmosSqlTranslatingExpressionVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ private bool TryRewriteContainsEntity(Expression source, Expression item, out Ex
840840
var propertyGetter = property.GetGetter();
841841
foreach (var value in values)
842842
{
843-
propertyValueList.Add(propertyGetter.GetStructuralTypeClrValue(value));
843+
propertyValueList.Add(propertyGetter.GetClrValue(value));
844844
}
845845

846846
rewrittenSource = Expression.Constant(propertyValueList);
@@ -971,7 +971,7 @@ private Expression CreatePropertyAccessExpression(Expression target, IProperty p
971971
{
972972
case SqlConstantExpression sqlConstantExpression:
973973
return Expression.Constant(
974-
property.GetGetter().GetStructuralTypeClrValue(sqlConstantExpression.Value!), property.ClrType.MakeNullable());
974+
property.GetGetter().GetClrValue(sqlConstantExpression.Value!), property.ClrType.MakeNullable());
975975

976976
case SqlParameterExpression sqlParameterExpression
977977
when sqlParameterExpression.Name.StartsWith(QueryCompilationContext.QueryParameterPrefix, StringComparison.Ordinal):
@@ -1002,7 +1002,7 @@ when memberInitExpression.Bindings.SingleOrDefault(
10021002
private static T ParameterValueExtractor<T>(QueryContext context, string baseParameterName, IProperty property)
10031003
{
10041004
var baseParameter = context.ParameterValues[baseParameterName];
1005-
return baseParameter == null ? (T)(object)null : (T)property.GetGetter().GetStructuralTypeClrValue(baseParameter);
1005+
return baseParameter == null ? (T)(object)null : (T)property.GetGetter().GetClrValue(baseParameter);
10061006
}
10071007

10081008
private static List<TProperty> ParameterListValueExtractor<TEntity, TProperty>(
@@ -1016,7 +1016,7 @@ private static List<TProperty> ParameterListValueExtractor<TEntity, TProperty>(
10161016
}
10171017

10181018
var getter = property.GetGetter();
1019-
return baseListParameter.Select(e => e != null ? (TProperty)getter.GetStructuralTypeClrValue(e) : (TProperty)(object)null).ToList();
1019+
return baseListParameter.Select(e => e != null ? (TProperty)getter.GetClrValue(e) : (TProperty)(object)null).ToList();
10201020
}
10211021

10221022
private static bool IsNullSqlConstantExpression(Expression expression)

src/EFCore.Cosmos/Storage/Internal/CosmosTypeMapping.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@ protected CosmosTypeMapping(CoreTypeMappingParameters parameters)
6060
/// any release. You should only use it directly in your code with extreme caution and knowing that
6161
/// doing so can result in application failures when updating to a new Entity Framework Core release.
6262
/// </summary>
63-
public override CoreTypeMapping Clone(
63+
public override CoreTypeMapping WithComposedConverter(
6464
ValueConverter? converter,
6565
ValueComparer? comparer = null,
66+
ValueComparer? keyComparer = null,
6667
CoreTypeMapping? elementMapping = null,
6768
JsonValueReaderWriter? jsonValueReaderWriter = null)
68-
=> new CosmosTypeMapping(Parameters.WithComposedConverter(converter, comparer, elementMapping, jsonValueReaderWriter));
69+
=> new CosmosTypeMapping(Parameters.WithComposedConverter(converter, comparer, keyComparer, elementMapping, jsonValueReaderWriter));
6970

7071
/// <summary>
7172
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to

src/EFCore.Design/Migrations/Design/CSharpSnapshotGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,8 @@ protected virtual void GenerateComplexProperty(
576576
{
577577
stringBuilder
578578
.AppendLine()
579-
.Append(".IsRequired()");
579+
.Append(complexTypeBuilderName)
580+
.AppendLine(".IsRequired();");
580581
}
581582

582583
GenerateProperties(complexTypeBuilderName, complexType.GetDeclaredProperties(), stringBuilder);

src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,7 +1288,7 @@ private bool TryRewriteContainsEntity(Expression? source, Expression item, [NotN
12881288
var propertyGetter = property.GetGetter();
12891289
foreach (var value in values)
12901290
{
1291-
propertyValueList.Add(propertyGetter.GetStructuralTypeClrValue(value));
1291+
propertyValueList.Add(propertyGetter.GetClrValue(value));
12921292
}
12931293

12941294
rewrittenSource = Expression.Constant(propertyValueList);
@@ -1436,7 +1436,7 @@ private Expression CreatePropertyAccessExpression(Expression target, IProperty p
14361436
return Expression.Constant(
14371437
constantExpression.Value is null
14381438
? null
1439-
: property.GetGetter().GetStructuralTypeClrValue(constantExpression.Value),
1439+
: property.GetGetter().GetClrValue(constantExpression.Value),
14401440
property.ClrType.MakeNullable());
14411441

14421442
case MethodCallExpression { Method.IsGenericMethod: true } methodCallExpression
@@ -1479,7 +1479,7 @@ when CanEvaluate(memberInitExpression):
14791479
private static T? ParameterValueExtractor<T>(QueryContext context, string baseParameterName, IProperty property)
14801480
{
14811481
var baseParameter = context.ParameterValues[baseParameterName];
1482-
return baseParameter == null ? (T?)(object?)null : (T?)property.GetGetter().GetStructuralTypeClrValue(baseParameter);
1482+
return baseParameter == null ? (T?)(object?)null : (T?)property.GetGetter().GetClrValue(baseParameter);
14831483
}
14841484

14851485
private static List<TProperty?>? ParameterListValueExtractor<TEntity, TProperty>(
@@ -1493,7 +1493,7 @@ when CanEvaluate(memberInitExpression):
14931493
}
14941494

14951495
var getter = property.GetGetter();
1496-
return baseListParameter.Select(e => e != null ? (TProperty?)getter.GetStructuralTypeClrValue(e) : (TProperty?)(object?)null).ToList();
1496+
return baseListParameter.Select(e => e != null ? (TProperty?)getter.GetClrValue(e) : (TProperty?)(object?)null).ToList();
14971497
}
14981498

14991499
private static ConstantExpression GetValue(Expression expression)

src/EFCore.InMemory/Storage/Internal/InMemoryTypeMapping.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,13 @@ private InMemoryTypeMapping(CoreTypeMappingParameters parameters)
5353
/// any release. You should only use it directly in your code with extreme caution and knowing that
5454
/// doing so can result in application failures when updating to a new Entity Framework Core release.
5555
/// </summary>
56-
public override CoreTypeMapping Clone(
56+
public override CoreTypeMapping WithComposedConverter(
5757
ValueConverter? converter,
5858
ValueComparer? comparer = null,
59+
ValueComparer? keyComparer = null,
5960
CoreTypeMapping? elementMapping = null,
6061
JsonValueReaderWriter? jsonValueReaderWriter = null)
61-
=> new InMemoryTypeMapping(Parameters.WithComposedConverter(converter, comparer, elementMapping, jsonValueReaderWriter));
62+
=> new InMemoryTypeMapping(Parameters.WithComposedConverter(converter, comparer, keyComparer, elementMapping, jsonValueReaderWriter));
6263

6364
/// <summary>
6465
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to

src/EFCore.Proxies/Proxies/Internal/PropertyChangedInterceptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private void HandleChanged(IInvocation invocation, IPropertyBase property, IEqua
9494

9595
if (_checkEquality)
9696
{
97-
var oldValue = property.GetGetter().GetClrValue(invocation.Proxy);
97+
var oldValue = property.GetGetter().GetClrValueUsingContainingEntity(invocation.Proxy);
9898

9999
invocation.Proceed();
100100

src/EFCore.Proxies/Proxies/Internal/PropertyChangingInterceptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private void HandleChanging(IInvocation invocation, IPropertyBase property, IEqu
9292
{
9393
if (_checkEquality)
9494
{
95-
var oldValue = property.GetGetter().GetClrValue(invocation.Proxy);
95+
var oldValue = property.GetGetter().GetClrValueUsingContainingEntity(invocation.Proxy);
9696
var newValue = invocation.Arguments[^1];
9797

9898
if (!(comparer?.Equals(oldValue, newValue) ?? Equals(oldValue, newValue)))

src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ private bool TryRewriteContainsEntity(Expression source, Expression item, [NotNu
16841684
var propertyGetter = property.GetGetter();
16851685
foreach (var value in values)
16861686
{
1687-
propertyValueList.Add(propertyGetter.GetStructuralTypeClrValue(value));
1687+
propertyValueList.Add(propertyGetter.GetClrValue(value));
16881688
}
16891689

16901690
rewrittenSource = Expression.Constant(propertyValueList);
@@ -1974,14 +1974,14 @@ private Expression CreatePropertyAccessExpression(Expression target, IProperty p
19741974
return Expression.Constant(
19751975
sqlConstantExpression.Value is null
19761976
? null
1977-
: property.GetGetter().GetStructuralTypeClrValue(sqlConstantExpression.Value),
1977+
: property.GetGetter().GetClrValue(sqlConstantExpression.Value),
19781978
property.ClrType.MakeNullable());
19791979

19801980
case ConstantExpression sqlConstantExpression:
19811981
return Expression.Constant(
19821982
sqlConstantExpression.Value is null
19831983
? null
1984-
: property.GetGetter().GetStructuralTypeClrValue(sqlConstantExpression.Value),
1984+
: property.GetGetter().GetClrValue(sqlConstantExpression.Value),
19851985
property.ClrType.MakeNullable());
19861986

19871987
case SqlParameterExpression sqlParameterExpression
@@ -2035,7 +2035,7 @@ private Expression CreateComplexPropertyAccessExpression(Expression target, ICom
20352035
=> target switch
20362036
{
20372037
SqlConstantExpression constant => Expression.Constant(
2038-
constant.Value is null ? null : complexProperty.GetGetter().GetStructuralTypeClrValue(constant.Value),
2038+
constant.Value is null ? null : complexProperty.GetGetter().GetClrValue(constant.Value),
20392039
complexProperty.ClrType.MakeNullable()),
20402040

20412041
SqlParameterExpression sqlParameterExpression
@@ -2070,11 +2070,11 @@ when memberInitExpression.Bindings.SingleOrDefault(mb => mb.Member.Name == compl
20702070
break;
20712071
}
20722072

2073-
baseValue = complexProperty.GetGetter().GetStructuralTypeClrValue(baseValue);
2073+
baseValue = complexProperty.GetGetter().GetClrValue(baseValue);
20742074
}
20752075
}
20762076

2077-
return baseValue == null ? (T?)(object?)null : (T?)property.GetGetter().GetStructuralTypeClrValue(baseValue);
2077+
return baseValue == null ? (T?)(object?)null : (T?)property.GetGetter().GetClrValue(baseValue);
20782078
}
20792079

20802080
private static List<TProperty?>? ParameterListValueExtractor<TEntity, TProperty>(
@@ -2088,7 +2088,7 @@ when memberInitExpression.Bindings.SingleOrDefault(mb => mb.Member.Name == compl
20882088
}
20892089

20902090
var getter = property.GetGetter();
2091-
return baseListParameter.Select(e => e != null ? (TProperty?)getter.GetStructuralTypeClrValue(e) : (TProperty?)(object?)null).ToList();
2091+
return baseListParameter.Select(e => e != null ? (TProperty?)getter.GetClrValue(e) : (TProperty?)(object?)null).ToList();
20922092
}
20932093

20942094
private sealed class ParameterBasedComplexPropertyChainExpression : Expression

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -808,8 +808,7 @@ when entityType.IsMappedToJson():
808808
// (OPENJSON, json_each, etc), but we can't use it for distinct, as it would warp the results.
809809
// Instead, we will treat every non-key property as identifier.
810810

811-
// TODO: hack/workaround, see #31398
812-
foreach (var property in entityType.GetDeclaredProperties().Where(p => !p.IsPrimaryKey() && p.GetRelationalTypeMapping().ElementTypeMapping == null))
811+
foreach (var property in entityType.GetDeclaredProperties().Where(p => !p.IsPrimaryKey()))
813812
{
814813
typeProjectionIdentifiers.Add(entityProjection.BindProperty(property));
815814
typeProjectionValueComparers.Add(property.GetKeyValueComparer());
@@ -826,8 +825,7 @@ when entityType.IsMappedToJson():
826825
// entity type would have wiped the identifiers when generating the join.
827826
Check.DebugAssert(primaryKey != null, "primary key is null.");
828827

829-
// TODO: hack/workaround, see #31398
830-
foreach (var property in primaryKey.Properties.Where(x => x.GetRelationalTypeMapping().ElementTypeMapping == null))
828+
foreach (var property in primaryKey.Properties)
831829
{
832830
typeProjectionIdentifiers.Add(entityProjection.BindProperty(property));
833831
typeProjectionValueComparers.Add(property.GetKeyValueComparer());
@@ -1851,7 +1849,7 @@ ConstantExpression AddStructuralTypeProjection(StructuralTypeProjectionExpressio
18511849
{
18521850
ownerEntity = ownership.PrincipalEntityType;
18531851
}
1854-
}
1852+
}
18551853
while (ownerEntity.IsMappedToJson());
18561854

18571855
var keyPropertyCount = ownerEntity.FindPrimaryKey()!.Properties.Count;

src/EFCore.Relational/Storage/Internal/NullTypeMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
using Microsoft.EntityFrameworkCore.Storage.Json;
55

6-
namespace Microsoft.EntityFrameworkCore.Storage;
6+
namespace Microsoft.EntityFrameworkCore.Storage.Internal;
77

88
/// <summary>
99
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to

0 commit comments

Comments
 (0)