diff --git a/src/EFCore/ChangeTracking/GeometryValueComparer.cs b/src/EFCore/ChangeTracking/GeometryValueComparer.cs
index bd09ee0879a..29594894c2e 100644
--- a/src/EFCore/ChangeTracking/GeometryValueComparer.cs
+++ b/src/EFCore/ChangeTracking/GeometryValueComparer.cs
@@ -11,7 +11,11 @@ namespace Microsoft.EntityFrameworkCore.ChangeTracking;
///
/// See EF Core value comparers for more information and examples.
///
-public class GeometryValueComparer<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] TGeometry>
+public class GeometryValueComparer
+ <[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicMethods
+ | DynamicallyAccessedMemberTypes.PublicProperties)]
+ TGeometry>
: ValueComparer
{
///
diff --git a/src/EFCore/ChangeTracking/Internal/ConvertingValueComparer.cs b/src/EFCore/ChangeTracking/Internal/ConvertingValueComparer.cs
index f5b58f0e265..d02486cc887 100644
--- a/src/EFCore/ChangeTracking/Internal/ConvertingValueComparer.cs
+++ b/src/EFCore/ChangeTracking/Internal/ConvertingValueComparer.cs
@@ -3,6 +3,7 @@
namespace Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
+using System.Diagnostics.CodeAnalysis;
using static Expression;
///
@@ -15,7 +16,11 @@ namespace Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
///
-public class ConvertingValueComparer : ValueComparer, IInfrastructure
+public class ConvertingValueComparer
+ <[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicMethods
+ | DynamicallyAccessedMemberTypes.PublicProperties)]
+ TTo, TFrom> : ValueComparer, IInfrastructure
{
private readonly ValueComparer _valueComparer;
diff --git a/src/EFCore/ChangeTracking/Internal/NullableValueComparer`.cs b/src/EFCore/ChangeTracking/Internal/NullableValueComparer`.cs
index 061f7b09c06..eaaefe13a1a 100644
--- a/src/EFCore/ChangeTracking/Internal/NullableValueComparer`.cs
+++ b/src/EFCore/ChangeTracking/Internal/NullableValueComparer`.cs
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.Diagnostics.CodeAnalysis;
+
namespace Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
///
@@ -9,7 +11,11 @@ namespace Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
///
-public class NullableValueComparer : ValueComparer, IInfrastructure
+public class NullableValueComparer
+ <[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicMethods
+ | DynamicallyAccessedMemberTypes.PublicProperties)]
+ T> : ValueComparer, IInfrastructure
where T : struct
{
private static readonly PropertyInfo _hasValueProperty = typeof(T?).GetProperty("HasValue")!;
diff --git a/src/EFCore/ChangeTracking/ValueComparer.cs b/src/EFCore/ChangeTracking/ValueComparer.cs
index d85d00e8145..a7e21b2aa42 100644
--- a/src/EFCore/ChangeTracking/ValueComparer.cs
+++ b/src/EFCore/ChangeTracking/ValueComparer.cs
@@ -256,7 +256,6 @@ public static HashCode Add(HashCode hash, int code)
public static ValueComparer CreateDefault(
[DynamicallyAccessedMembers(
DynamicallyAccessedMemberTypes.PublicMethods
- | DynamicallyAccessedMemberTypes.NonPublicMethods
| DynamicallyAccessedMemberTypes.PublicProperties)]
Type type,
bool favorStructuralComparisons)
@@ -279,7 +278,11 @@ public static ValueComparer CreateDefault(
///
/// The type.
/// The .
- public static ValueComparer CreateDefault(bool favorStructuralComparisons)
+ public static ValueComparer CreateDefault
+ <[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicMethods
+ | DynamicallyAccessedMemberTypes.PublicProperties)]
+ T>(bool favorStructuralComparisons)
{
var nonNullableType = typeof(T).UnwrapNullableType();
@@ -313,7 +316,11 @@ public static ValueComparer CreateDefault(bool favorStructuralComparisons)
}
// PublicMethods is required to preserve e.g. GetHashCode
- internal class DefaultValueComparer<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] T> : ValueComparer
+ internal class DefaultValueComparer
+ <[DynamicallyAccessedMembers(
+ DynamicallyAccessedMemberTypes.PublicMethods
+ | DynamicallyAccessedMemberTypes.PublicProperties)]
+ T> : ValueComparer
{
public DefaultValueComparer(bool favorStructuralComparisons)
: base(favorStructuralComparisons)
diff --git a/src/EFCore/ChangeTracking/ValueComparer`.cs b/src/EFCore/ChangeTracking/ValueComparer`.cs
index 8f9a55f04c8..13d56a1b8e3 100644
--- a/src/EFCore/ChangeTracking/ValueComparer`.cs
+++ b/src/EFCore/ChangeTracking/ValueComparer`.cs
@@ -29,12 +29,10 @@ namespace Microsoft.EntityFrameworkCore.ChangeTracking;
/// The type.
// PublicMethods is required to preserve e.g. GetHashCode
public class ValueComparer
-<[DynamicallyAccessedMembers(
+ <[DynamicallyAccessedMembers(
DynamicallyAccessedMemberTypes.PublicMethods
- | DynamicallyAccessedMemberTypes.NonPublicMethods
| DynamicallyAccessedMemberTypes.PublicProperties)]
- T>
- : ValueComparer, IEqualityComparer
+ T> : ValueComparer, IEqualityComparer
{
private Func? _equals;
private Func? _hashCode;