From 25e381faa2ee625a66b5a7d77204f2599ce5e359 Mon Sep 17 00:00:00 2001 From: Christopher Jolly Date: Mon, 4 Mar 2024 19:49:54 +0800 Subject: [PATCH] string keys are allowed to be case insensitive. Add in the correct comparer if needed --- src/EFCore.Jet/Storage/Internal/JetStringTypeMapping.cs | 8 ++++++-- src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/EFCore.Jet/Storage/Internal/JetStringTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetStringTypeMapping.cs index 969e8a8..4f75f0d 100644 --- a/src/EFCore.Jet/Storage/Internal/JetStringTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetStringTypeMapping.cs @@ -4,6 +4,7 @@ using System; using System.Data; using System.Data.Common; using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage.Json; @@ -18,6 +19,8 @@ namespace EntityFrameworkCore.Jet.Storage.Internal private readonly bool _keepLineBreakCharacters; private readonly int _maxSpecificSize; + private static readonly CaseInsensitiveValueComparer CaseInsensitiveValueComparer = new(); + /// /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. @@ -28,10 +31,11 @@ namespace EntityFrameworkCore.Jet.Storage.Internal int? size = null, bool fixedLength = false, StoreTypePostfix? storeTypePostfix = null, - bool keepLineBreakCharacters = false) + bool keepLineBreakCharacters = false, + bool useKeyComparison = false) : this( new RelationalTypeMappingParameters( - new CoreTypeMappingParameters(typeof(string), jsonValueReaderWriter: JsonStringReaderWriter.Instance), + new CoreTypeMappingParameters(typeof(string), comparer: useKeyComparison ? CaseInsensitiveValueComparer : null, keyComparer:useKeyComparison ? CaseInsensitiveValueComparer : null, jsonValueReaderWriter: JsonStringReaderWriter.Instance), storeType ?? GetStoreName(fixedLength), storeTypePostfix ?? StoreTypePostfix.Size, (fixedLength diff --git a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs index eff878f..93a094d 100644 --- a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs +++ b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs @@ -350,7 +350,8 @@ namespace EntityFrameworkCore.Jet.Storage.Internal ? _fixedLengthUnicodeString.StoreTypeNameBase : _variableLengthUnicodeString.StoreTypeNameBase, size: size, - unicode: true); + unicode: true, + useKeyComparison: mappingInfo.IsKeyOrIndex); } if (clrType == typeof(byte[]))