public override Task Using_static_string_Equals_with_StringComparison_throws_informative_error(bool async) { return(AssertTranslationFailedWithDetails( () => AssertQuery( async, ss => ss.Set <Customer>().Where(c => string.Equals(c.CustomerID, "ALFKI", StringComparison.InvariantCulture))), MySqlStrings.QueryUnableToTranslateMethodWithStringComparison(nameof(String), nameof(string.Equals), nameof(MySqlDbContextOptionsBuilder.EnableStringComparisonTranslations)))); }
protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) { if (NewArrayExpressionSupportMethodInfos.Contains(methodCallExpression.Method)) { var arguments = new Expression[methodCallExpression.Arguments.Count]; for (var i = 0; i < arguments.Length; i++) { var argument = methodCallExpression.Arguments[i]; if (argument is NewArrayExpression newArrayExpression) { if (TranslationFailed(argument, VisitMethodCallNewArray(newArrayExpression), out var sqlExpression)) { return(null); } arguments[i] = sqlExpression; } else { arguments[i] = argument; } } methodCallExpression = methodCallExpression.Update(methodCallExpression.Object, arguments); } var result = base.VisitMethodCall(methodCallExpression); if (result == null && MySqlStringComparisonMethodTranslator.StringComparisonMethodInfos.Any(m => m == methodCallExpression.Method)) { var message = MySqlStrings.QueryUnableToTranslateMethodWithStringComparison( methodCallExpression.Method.DeclaringType.Name, methodCallExpression.Method.Name, nameof(MySqlDbContextOptionsBuilder.EnableStringComparisonTranslations)); // EF Core returns an error message on its own, when the string.Equals() methods (static and non-static) are being used with // a `StringComparison` parameter. // Since we also support other translations, but all of them only when opted in, we will replace the EF Core error message // with our own, that is more appropriate for our case. if (TranslationErrorDetails.Contains(CoreStrings.QueryUnableToTranslateStringEqualsWithStringComparison)) { var translationErrorDetails = TranslationErrorDetails; ResetTranslationErrorDetails(); message = translationErrorDetails.Replace(CoreStrings.QueryUnableToTranslateStringEqualsWithStringComparison, message); } AddTranslationErrorDetails(message); } return(result); }