diff --git a/src/EFCore.InMemory/Storage/Internal/InMemoryTable.cs b/src/EFCore.InMemory/Storage/Internal/InMemoryTable.cs index 2aa02485e80..15ccf6f9eeb 100644 --- a/src/EFCore.InMemory/Storage/Internal/InMemoryTable.cs +++ b/src/EFCore.InMemory/Storage/Internal/InMemoryTable.cs @@ -229,29 +229,32 @@ private static bool IsConcurrencyConflict( object? rowValue, Dictionary concurrencyConflicts) { - if (property.IsConcurrencyToken) + if (!property.IsConcurrencyToken) { - var comparer = property.GetKeyValueComparer(); - var originalValue = entry.GetOriginalValue(property); + return false; + } - var converter = property.GetValueConverter() - ?? property.FindTypeMapping()?.Converter; + var comparer = property.GetKeyValueComparer() + ?? StructuralComparisons.StructuralEqualityComparer; - if (converter != null) - { - rowValue = converter.ConvertFromProvider(rowValue); - } + var originalValue = entry.GetOriginalValue(property); - if ((comparer != null && !comparer.Equals(rowValue, originalValue)) - || (comparer == null && !StructuralComparisons.StructuralEqualityComparer.Equals(rowValue, originalValue))) - { - concurrencyConflicts.Add(property, rowValue); + var converter = property.GetValueConverter() + ?? property.FindTypeMapping()?.Converter; - return true; - } + if (converter != null) + { + rowValue = converter.ConvertFromProvider(rowValue); } - return false; + if (comparer.Equals(rowValue, originalValue)) + { + return false; + } + + concurrencyConflicts.Add(property, rowValue); + + return true; } ///