diff --git a/readme.md b/readme.md
index d1a75049..3b9bdfae 100644
--- a/readme.md
+++ b/readme.md
@@ -852,6 +852,23 @@ await Verify(target)
+## DisableSqlFormatting
+
+By default SQL captured against SQL Server is reformatted via [SqlFormatter](https://github.com/SimonCropp/SqlFormatter) before being written to the snapshot. This applies to both [Recording](#recording) output and [Queryable](#queryable) `.sql` files.
+
+Reformatting can be disabled globally:
+
+
+
+```cs
+VerifyEntityFramework.DisableSqlFormatting = true;
+```
+snippet source | anchor
+
+
+When disabled, the SQL is written verbatim as produced by EntityFramework.
+
+
## Icon
[Database](https://thenounproject.com/term/database/310841/) designed by [Creative Stall](https://thenounproject.com/creativestall/) from [The Noun Project](https://thenounproject.com).
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/GlobalUsings.cs b/src/Verify.EntityFramework.StaticSettingsTests/GlobalUsings.cs
new file mode 100644
index 00000000..bdc5b06d
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/GlobalUsings.cs
@@ -0,0 +1,3 @@
+global using System.ComponentModel.DataAnnotations.Schema;
+global using Argon;
+global using Microsoft.EntityFrameworkCore;
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/ModuleInitializer.cs b/src/Verify.EntityFramework.StaticSettingsTests/ModuleInitializer.cs
new file mode 100644
index 00000000..ab4babd9
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/ModuleInitializer.cs
@@ -0,0 +1,21 @@
+using Microsoft.EntityFrameworkCore.Metadata;
+
+public static class ModuleInitializer
+{
+ static IModel GetDbModel()
+ {
+ var options = new DbContextOptionsBuilder();
+ options.UseSqlServer("fake");
+ using var data = new SampleDbContext(options.Options);
+ return data.Model;
+ }
+
+ [ModuleInitializer]
+ public static void Init()
+ {
+ var model = GetDbModel();
+ VerifyEntityFramework.Initialize(model);
+ VerifierSettings.InitializePlugins();
+ Recording.IgnoreNames("sql");
+ }
+}
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.sql b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.sql
new file mode 100644
index 00000000..336f0670
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.sql
@@ -0,0 +1,3 @@
+SELECT [c].[Id], [c].[Name]
+FROM [Companies] AS [c]
+WHERE [c].[Name] = N'Title'
\ No newline at end of file
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.txt b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.txt
new file mode 100644
index 00000000..ad47dbb9
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingQueryable.verified.txt
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingRecording.verified.txt b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingRecording.verified.txt
new file mode 100644
index 00000000..86fe8348
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.DisableSqlFormattingRecording.verified.txt
@@ -0,0 +1,10 @@
+{
+ ef: {
+ Type: ReaderExecutedAsync,
+ HasTransaction: false,
+ Text:
+SELECT [c].[Id], [c].[Name]
+FROM [Companies] AS [c]
+WHERE [c].[Name] = N'Title'
+ }
+}
\ No newline at end of file
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.cs b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.cs
new file mode 100644
index 00000000..ca849a4e
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/StaticSettingsTests.cs
@@ -0,0 +1,53 @@
+[TestFixture]
+[NonParallelizable]
+public class StaticSettingsTests
+{
+ static SqlInstance sqlInstance = new(
+ buildTemplate: data => data.Database.EnsureCreatedAsync(),
+ constructInstance: builder =>
+ {
+ builder.EnableRecording();
+ return new(builder.Options);
+ });
+
+ [TearDown]
+ public void TearDown() =>
+ VerifyEntityFramework.DisableSqlFormatting = false;
+
+ [Test]
+ public async Task DisableSqlFormattingRecording()
+ {
+ #region DisableSqlFormatting
+
+ VerifyEntityFramework.DisableSqlFormatting = true;
+
+ #endregion
+
+ await using var database = await sqlInstance.Build();
+ var data = database.Context;
+
+ Recording.Start();
+
+ await data
+ .Companies
+ .Where(_ => _.Name == "Title")
+ .ToListAsync();
+
+ await Verify();
+ }
+
+ [Test]
+ public async Task DisableSqlFormattingQueryable()
+ {
+ VerifyEntityFramework.DisableSqlFormatting = true;
+
+ await using var database = await sqlInstance.Build();
+ var data = database.Context;
+
+ var queryable = data
+ .Companies
+ .Where(_ => _.Name == "Title");
+
+ await Verify(queryable);
+ }
+}
diff --git a/src/Verify.EntityFramework.StaticSettingsTests/Verify.EntityFramework.StaticSettingsTests.csproj b/src/Verify.EntityFramework.StaticSettingsTests/Verify.EntityFramework.StaticSettingsTests.csproj
new file mode 100644
index 00000000..65dad1a6
--- /dev/null
+++ b/src/Verify.EntityFramework.StaticSettingsTests/Verify.EntityFramework.StaticSettingsTests.csproj
@@ -0,0 +1,21 @@
+
+
+ net10.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Verify.EntityFramework.slnx b/src/Verify.EntityFramework.slnx
index 5e68fc85..9c58881d 100644
--- a/src/Verify.EntityFramework.slnx
+++ b/src/Verify.EntityFramework.slnx
@@ -11,6 +11,7 @@
+
diff --git a/src/Verify.EntityFramework/Converters/LogEntryConverter.cs b/src/Verify.EntityFramework/Converters/LogEntryConverter.cs
index a74e7b5e..f8e5f51e 100644
--- a/src/Verify.EntityFramework/Converters/LogEntryConverter.cs
+++ b/src/Verify.EntityFramework/Converters/LogEntryConverter.cs
@@ -8,7 +8,7 @@ public override void Write(VerifyJsonWriter writer, LogEntry logEntry)
writer.WriteMember(logEntry, logEntry.HasTransaction, "HasTransaction");
writer.WriteMember(logEntry, logEntry.Exception, "Exception");
writer.WriteMember(logEntry, logEntry.Parameters, "Parameters");
- if (logEntry.IsSqlServer)
+ if (logEntry.IsSqlServer && !VerifyEntityFramework.DisableSqlFormatting)
{
var text = SqlFormatter.Format(logEntry.Text);
writer.WriteMember(logEntry, text.ToString(), "Text");
diff --git a/src/Verify.EntityFramework/VerifyEntityFramework.cs b/src/Verify.EntityFramework/VerifyEntityFramework.cs
index 4d98a8ca..8f7d8d83 100644
--- a/src/Verify.EntityFramework/VerifyEntityFramework.cs
+++ b/src/Verify.EntityFramework/VerifyEntityFramework.cs
@@ -54,6 +54,8 @@ public static void IgnoreNavigationProperties(this VerifySettings settings, IMod
}
}
+ public static bool DisableSqlFormatting { get; set; }
+
public static void ScrubInlineEfDateTimes() =>
VerifierSettings.ScrubInlineDateTimes("yyyy-MM-ddTHH:mm:ss.fffffffZ");
@@ -155,6 +157,11 @@ static ConversionResult QueryableToSql(object arg, IReadOnlyDictionary