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));
+ }
}