From 497a30b82a29887433d0668964c7daa0cf552d55 Mon Sep 17 00:00:00 2001 From: Henk Kin Date: Thu, 2 Apr 2020 13:30:55 +0200 Subject: [PATCH] Changed PrimaryKeyExpression to be object based instead of string based --- .../DbContextExtensions.cs | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/EntityCloner.Microsoft.EntityFrameworkCore/DbContextExtensions.cs b/EntityCloner.Microsoft.EntityFrameworkCore/DbContextExtensions.cs index 3b488a2..1f7cf74 100644 --- a/EntityCloner.Microsoft.EntityFrameworkCore/DbContextExtensions.cs +++ b/EntityCloner.Microsoft.EntityFrameworkCore/DbContextExtensions.cs @@ -60,14 +60,14 @@ private static Expression> CreatePrimaryKeyExpression(primaryKeyProperty.Name, ExpressionType.Equal, idPart.ToString()); + var idPartPredicate = BuildPredicate(primaryKeyProperty.Name, ExpressionType.Equal, idPart); primaryKeyExpression = AndAlso(primaryKeyExpression, idPartPredicate); } return primaryKeyExpression; } - private static Expression> BuildPredicate(string propertyName, ExpressionType comparison, string value) + private static Expression> BuildPredicate(string propertyName, ExpressionType comparison, object value) { var parameter = Expression.Parameter(typeof(T), "x"); var left = propertyName.Split('.').Aggregate((Expression)parameter, Expression.Property); @@ -93,26 +93,9 @@ private static Expression> AndAlso(this Expression).MakeGenericType(left.Type)); - } - else - { - var valueType = Nullable.GetUnderlyingType(left.Type) ?? left.Type; - typedValue = valueType.IsEnum ? Enum.Parse(valueType, value) : - valueType == typeof(Guid) ? Guid.Parse(value) : - Convert.ChangeType(value, valueType); - } - } - var right = Expression.Constant(typedValue, left.Type); + var right = Expression.Constant(value, left.Type); return Expression.MakeBinary(type, left, right); }