From 2375e3c187bfa1b5ee1247ecbcacc346816a7d10 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Fri, 19 May 2023 14:54:38 +0200 Subject: [PATCH] Allow value comparers for supertypes of the mapping's type Necessary for primitive collection, where e.g. the comparer has type IList but the type mapping is for the concrete List. Related to/part of #25364 --- src/EFCore/Storage/CoreTypeMapping.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/EFCore/Storage/CoreTypeMapping.cs b/src/EFCore/Storage/CoreTypeMapping.cs index 868cb139aea..364aa275bad 100644 --- a/src/EFCore/Storage/CoreTypeMapping.cs +++ b/src/EFCore/Storage/CoreTypeMapping.cs @@ -146,9 +146,9 @@ protected CoreTypeMapping(CoreTypeMappingParameters parameters) Check.DebugAssert( parameters.Comparer == null || converter != null - || parameters.Comparer.Type == clrType, + || parameters.Comparer.Type.IsAssignableFrom(clrType), $"Expected {clrType}, got {parameters.Comparer?.Type}"); - if (parameters.Comparer?.Type == clrType) + if (parameters.Comparer?.Type.IsAssignableFrom(clrType) == true) { _comparer = parameters.Comparer; } @@ -156,18 +156,18 @@ protected CoreTypeMapping(CoreTypeMappingParameters parameters) Check.DebugAssert( parameters.KeyComparer == null || converter != null - || parameters.KeyComparer.Type == parameters.ClrType, + || parameters.KeyComparer.Type.IsAssignableFrom(parameters.ClrType), $"Expected {parameters.ClrType}, got {parameters.KeyComparer?.Type}"); - if (parameters.KeyComparer?.Type == clrType) + if (parameters.KeyComparer?.Type.IsAssignableFrom(clrType) == true) { _keyComparer = parameters.KeyComparer; } Check.DebugAssert( parameters.ProviderValueComparer == null - || parameters.ProviderValueComparer.Type == (converter?.ProviderClrType ?? clrType), + || parameters.ProviderValueComparer.Type.IsAssignableFrom(converter?.ProviderClrType ?? clrType), $"Expected {converter?.ProviderClrType ?? clrType}, got {parameters.ProviderValueComparer?.Type}"); - if (parameters.ProviderValueComparer?.Type == (converter?.ProviderClrType ?? clrType)) + if (parameters.ProviderValueComparer?.Type.IsAssignableFrom(converter?.ProviderClrType ?? clrType) == true) { _providerValueComparer = parameters.ProviderValueComparer; }