Skip to content

Commit 2375e3c

Browse files
committed
Allow value comparers for supertypes of the mapping's type
Necessary for primitive collection, where e.g. the comparer has type IList<int> but the type mapping is for the concrete List<int>. Related to/part of dotnet#25364
1 parent c983103 commit 2375e3c

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/EFCore/Storage/CoreTypeMapping.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -146,28 +146,28 @@ protected CoreTypeMapping(CoreTypeMappingParameters parameters)
146146
Check.DebugAssert(
147147
parameters.Comparer == null
148148
|| converter != null
149-
|| parameters.Comparer.Type == clrType,
149+
|| parameters.Comparer.Type.IsAssignableFrom(clrType),
150150
$"Expected {clrType}, got {parameters.Comparer?.Type}");
151-
if (parameters.Comparer?.Type == clrType)
151+
if (parameters.Comparer?.Type.IsAssignableFrom(clrType) == true)
152152
{
153153
_comparer = parameters.Comparer;
154154
}
155155

156156
Check.DebugAssert(
157157
parameters.KeyComparer == null
158158
|| converter != null
159-
|| parameters.KeyComparer.Type == parameters.ClrType,
159+
|| parameters.KeyComparer.Type.IsAssignableFrom(parameters.ClrType),
160160
$"Expected {parameters.ClrType}, got {parameters.KeyComparer?.Type}");
161-
if (parameters.KeyComparer?.Type == clrType)
161+
if (parameters.KeyComparer?.Type.IsAssignableFrom(clrType) == true)
162162
{
163163
_keyComparer = parameters.KeyComparer;
164164
}
165165

166166
Check.DebugAssert(
167167
parameters.ProviderValueComparer == null
168-
|| parameters.ProviderValueComparer.Type == (converter?.ProviderClrType ?? clrType),
168+
|| parameters.ProviderValueComparer.Type.IsAssignableFrom(converter?.ProviderClrType ?? clrType),
169169
$"Expected {converter?.ProviderClrType ?? clrType}, got {parameters.ProviderValueComparer?.Type}");
170-
if (parameters.ProviderValueComparer?.Type == (converter?.ProviderClrType ?? clrType))
170+
if (parameters.ProviderValueComparer?.Type.IsAssignableFrom(converter?.ProviderClrType ?? clrType) == true)
171171
{
172172
_providerValueComparer = parameters.ProviderValueComparer;
173173
}

0 commit comments

Comments
 (0)