diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml
index b81aea8..fc61b8f 100644
--- a/.github/workflows/dotnetcore.yml
+++ b/.github/workflows/dotnetcore.yml
@@ -8,12 +8,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v1
+ - uses: actions/checkout@v4
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- include-prerelease: true
- name: Build with dotnet
run: dotnet build "./src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.sln" --configuration Release
# name: Execute Tests
diff --git a/.gitignore b/.gitignore
index 2f1229f..433d2a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -347,4 +347,7 @@ healthchecksdb
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
\ No newline at end of file
+.ionide/
+
+# Claude Code local config
+.claude/
\ No newline at end of file
diff --git a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.Tests/DateTimeQueryTests.cs b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.Tests/DateTimeQueryTests.cs
index 9b4a48c..ecf73ed 100644
--- a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.Tests/DateTimeQueryTests.cs
+++ b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.Tests/DateTimeQueryTests.cs
@@ -22,5 +22,42 @@ public async Task DateTime_Date_Test()
Assert.Equal(6, raceResults.Count);
}
+
+ [Fact]
+ public async Task DateTime_UtcNow_Test()
+ {
+ var raceResults = await this.Db.Race.Select(r => new { NowUtc = DateTime.UtcNow }).ToListAsync();
+
+ Assert.Equal(
+ condense(@$"SELECT GETUTCDATE() AS [NowUtc] FROM [Race] AS [r]"),
+ condense(this.Db.Sql));
+
+ Assert.Equal(12, raceResults.Count);
+ }
+
+ [Fact]
+ public async Task DateTime_UtcNow_Compared_Test()
+ {
+ var raceResults = await this.Db.Race.Where(r => r.DateTimeDate.Date >= DateTime.UtcNow).ToListAsync();
+
+ Assert.Equal(
+ condense(@$"{RaceSelectStatement} WHERE CONVERT(date, [r].[DateTimeDate]) >= GETUTCDATE()"),
+ condense(this.Db.Sql));
+
+ Assert.Equal(0, raceResults.Count);
+ }
+
+ [Fact]
+ public async Task DateTime_UtcNow_And_Input_Parameter_Test()
+ {
+ var dt = new DateTime(2019, 7, 1);
+ var raceResults = await this.Db.Race.Where(r => dt >= DateTime.UtcNow).ToListAsync();
+
+ Assert.Equal(
+ condense(@$"{RaceSelectStatement} WHERE @dt >= GETUTCDATE()"),
+ condense(this.Db.Sql));
+
+ Assert.Equal(0, raceResults.Count);
+ }
}
}
\ No newline at end of file
diff --git a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.csproj b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.csproj
index 690ddfc..b85a571 100644
--- a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.csproj
+++ b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime.csproj
@@ -14,7 +14,7 @@
https://github.com/StevenRasmussen/EFCore.SqlServer.NodaTime
git
Entity Framework Core;entity-framework-core;EF;Data;O/RM;EntityFrameworkCore;EFCore;Noda;NodaTime;Noda Time
- 10.0.0
+ 10.0.1
README.md
diff --git a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/Storage/SqlServerNodaTimeTypeMappingSourcePlugin.cs b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/Storage/SqlServerNodaTimeTypeMappingSourcePlugin.cs
index 4759045..311dd26 100644
--- a/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/Storage/SqlServerNodaTimeTypeMappingSourcePlugin.cs
+++ b/src/SimplerSoftware.EntityFrameworkCore.SqlServer.NodaTime/Storage/SqlServerNodaTimeTypeMappingSourcePlugin.cs
@@ -60,8 +60,12 @@ public RelationalTypeMapping FindMapping(in RelationalTypeMappingInfo mappingInf
{
if (StoreTypeMappings.TryGetValue(storeTypeName, out var mappings))
{
+ // When clrType is null, defer to EF Core's default mapping source: our store
+ // types (datetime, datetime2, etc.) all have non-NodaTime defaults that EF
+ // can supply. Returning a NodaTime mapping here pollutes plain DateTime
+ // expressions like DateTime.UtcNow with InstantValueConverter.
if (clrType == null)
- return mappings[0];
+ return null;
foreach (var m in mappings)
if (m.ClrType == clrType)
@@ -73,7 +77,7 @@ public RelationalTypeMapping FindMapping(in RelationalTypeMappingInfo mappingInf
if (StoreTypeMappings.TryGetValue(storeTypeNameBase!, out mappings))
{
if (clrType == null)
- return mappings[0].Clone(mappingInfo);
+ return null;
foreach (var m in mappings)
if (m.ClrType == clrType)