From e242955baecb924491afced351bef767b08ba51d Mon Sep 17 00:00:00 2001 From: Smit Patel Date: Fri, 7 Feb 2020 16:49:34 -0800 Subject: [PATCH] Generate parameter name properly for ExecuteSqlInterpolated Use sql generation helper to generate parameter name to write in sql command. Resolves #19493 --- .../Storage/Internal/RawSqlCommandBuilder.cs | 2 +- .../Query/SqlExecutorTestBase.cs | 14 ++++++++++++++ .../Query/SqlExecutorSqlServerTest.cs | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/EFCore.Relational/Storage/Internal/RawSqlCommandBuilder.cs b/src/EFCore.Relational/Storage/Internal/RawSqlCommandBuilder.cs index efe6e94c626..ae10e02afe6 100644 --- a/src/EFCore.Relational/Storage/Internal/RawSqlCommandBuilder.cs +++ b/src/EFCore.Relational/Storage/Internal/RawSqlCommandBuilder.cs @@ -85,7 +85,7 @@ public virtual RawSqlCommand Build(string sql, IEnumerable parameters) dbParameter.ParameterName = _sqlGenerationHelper.GenerateParameterName(parameterNameGenerator.GenerateNext()); } - substitutions.Add(dbParameter.ParameterName); + substitutions.Add(_sqlGenerationHelper.GenerateParameterName(dbParameter.ParameterName)); relationalCommandBuilder.AddRawParameter(dbParameter.ParameterName, dbParameter); } else diff --git a/test/EFCore.Relational.Specification.Tests/Query/SqlExecutorTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/SqlExecutorTestBase.cs index 606131814c1..64c76eebe97 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/SqlExecutorTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/SqlExecutorTestBase.cs @@ -168,6 +168,20 @@ public virtual void Query_with_parameters_interpolated() Assert.Equal(-1, actual); } + [ConditionalFact] + public virtual void Query_with_DbParameters_interpolated() + { + var city = CreateDbParameter("city", "London"); + var contactTitle = CreateDbParameter( "contactTitle", "Sales Representative"); + + using var context = CreateContext(); + var actual = context.Database + .ExecuteSqlInterpolated( + $@"SELECT COUNT(*) FROM ""Customers"" WHERE ""City"" = {city} AND ""ContactTitle"" = {contactTitle}"); + + Assert.Equal(-1, actual); + } + [ConditionalFact] public virtual async Task Executes_stored_procedure_async() { diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SqlExecutorSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SqlExecutorSqlServerTest.cs index 6d979150fdc..598d9422b29 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SqlExecutorSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SqlExecutorSqlServerTest.cs @@ -114,6 +114,17 @@ public override void Query_with_parameters_interpolated() SELECT COUNT(*) FROM ""Customers"" WHERE ""City"" = @p0 AND ""ContactTitle"" = @p1"); } + public override void Query_with_DbParameters_interpolated() + { + base.Query_with_DbParameters_interpolated(); + + AssertSql( + @"city='London' (Nullable = false) (Size = 6) +contactTitle='Sales Representative' (Nullable = false) (Size = 20) + +SELECT COUNT(*) FROM ""Customers"" WHERE ""City"" = @city AND ""ContactTitle"" = @contactTitle"); + } + public override async Task Query_with_parameters_async() { await base.Query_with_parameters_async();