From 085c60404844e2815d29c1a5479c78165c1edbdf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:33:09 +0000 Subject: [PATCH 1/2] Initial plan From f48bb917837c16ceda9f03593a685221f616071c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:40:39 +0000 Subject: [PATCH 2/2] Add N prefix for xml string literals in SqlServer Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> --- .../Storage/Internal/SqlServerStringTypeMapping.cs | 4 +++- .../Storage/SqlServerStringTypeMappingTest.cs | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/EFCore.SqlServer/Storage/Internal/SqlServerStringTypeMapping.cs b/src/EFCore.SqlServer/Storage/Internal/SqlServerStringTypeMapping.cs index f28f1d15523..485d0d21e23 100644 --- a/src/EFCore.SqlServer/Storage/Internal/SqlServerStringTypeMapping.cs +++ b/src/EFCore.SqlServer/Storage/Internal/SqlServerStringTypeMapping.cs @@ -110,7 +110,9 @@ protected SqlServerStringTypeMapping(RelationalTypeMappingParameters parameters, _maxSize = AnsiMax; } - _isUtf16 = parameters.Unicode && parameters.StoreType.StartsWith("n", StringComparison.OrdinalIgnoreCase); + _isUtf16 = parameters.Unicode + && (parameters.StoreType.StartsWith("n", StringComparison.OrdinalIgnoreCase) + || parameters.StoreType.StartsWith("xml", StringComparison.OrdinalIgnoreCase)); _sqlDbType = sqlDbType; } diff --git a/test/EFCore.SqlServer.Tests/Storage/SqlServerStringTypeMappingTest.cs b/test/EFCore.SqlServer.Tests/Storage/SqlServerStringTypeMappingTest.cs index 41db30f7291..24f909921d0 100644 --- a/test/EFCore.SqlServer.Tests/Storage/SqlServerStringTypeMappingTest.cs +++ b/test/EFCore.SqlServer.Tests/Storage/SqlServerStringTypeMappingTest.cs @@ -37,4 +37,14 @@ public void GenerateProviderValueSqlLiteral_works_unicode(string value, string e var mapping = new SqlServerStringTypeMapping("nvarchar(max)", unicode: true); Assert.Equal(expected, mapping.GenerateProviderValueSqlLiteral(value)); } + + [Theory, InlineData("", "N''"), InlineData("it", "N'it'"), InlineData("I'm", "N'I''m'"), + InlineData("", "N''"), + InlineData("\n", "nchar(10)"), + InlineData("it\n", "CONCAT(CAST(N'it' AS nvarchar(max)), nchar(10))")] + public void GenerateProviderValueSqlLiteral_works_xml(string value, string expected) + { + var mapping = new SqlServerStringTypeMapping("xml", unicode: true, storeTypePostfix: StoreTypePostfix.None); + Assert.Equal(expected, mapping.GenerateProviderValueSqlLiteral(value)); + } }