From a3b036c9449946dfa9cdaaeb5d3d813e0501144b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 24 Jul 2026 15:59:48 +1000 Subject: [PATCH] Fix cached validation failure in RequiredOrder --- src/EfOrderBy/RequiredOrder.cs | 6 ++++-- src/Tests/RequireOrderingTests.cs | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/EfOrderBy/RequiredOrder.cs b/src/EfOrderBy/RequiredOrder.cs index f0b0f1a..19cccb5 100644 --- a/src/EfOrderBy/RequiredOrder.cs +++ b/src/EfOrderBy/RequiredOrder.cs @@ -12,8 +12,6 @@ public static void Validate(DbContext context) return; } - validated.Add(contextType); - // Check if this DbContext requires ordering for all entities (opt-in feature) var requireOrdering = context.GetService() .FindExtension() @@ -23,6 +21,10 @@ public static void Validate(DbContext context) { ValidateAllEntitiesHaveOrdering(context.Model); } + + // Marked only after validation succeeds, so a failed validation keeps throwing + // instead of silently passing on every subsequent query + validated.Add(contextType); } static void ValidateAllEntitiesHaveOrdering(IModel model) diff --git a/src/Tests/RequireOrderingTests.cs b/src/Tests/RequireOrderingTests.cs index 4cdeba9..3ac14d8 100644 --- a/src/Tests/RequireOrderingTests.cs +++ b/src/Tests/RequireOrderingTests.cs @@ -54,6 +54,23 @@ public async Task RequireOrderingForAllEntities_ThrowsWhenEntityMissingOrdering( Assert.That(ex.Message, Does.Contain("do not have ordering configured")); } + [Test] + public async Task RequireOrderingForAllEntities_ThrowsOnEveryQueryNotJustTheFirst() + { + await using var database = await sqlInstanceWithMissing.Build(); + await using var context = database.NewDbContext(); + + Assert.ThrowsAsync(() => context.EntitiesWithoutDefaultOrder.ToListAsync()); + + // Validation is cached per DbContext type. A failed validation must not be cached, + // otherwise the error disappears after the first query and later queries silently + // return unordered results + var exception = Assert.ThrowsAsync(() => context.EntitiesWithoutDefaultOrder.ToListAsync()); + + Assert.That(exception!.Message, Does.Contain("EntityWithoutDefaultOrder")); + Assert.That(exception.Message, Does.Contain("do not have ordering configured")); + } + [Test] public async Task RequireOrderingForAllEntities_SucceedsWhenAllEntitiesHaveOrdering() {