From 47c04befc6ee554e466e15555525c4600b04779d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 12:17:04 +0000 Subject: [PATCH 1/3] Initial plan From 02b5a9598d2fd5efe1e053eff8d6650e5c5180e8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 12:39:25 +0000 Subject: [PATCH 2/3] Change fixture classes from SharedStoreFixtureBase, IQueryFixtureBase to QueryFixtureBase Update TimestampQueryFixture, NodaTimeQueryNpgsqlFixture, BigIntegerQueryFixture, and EnumFixture to inherit from QueryFixtureBase instead of SharedStoreFixtureBase with IQueryFixtureBase. Remove GetContextCreator() (provided by base class) and change GetExpectedData(), EntitySorters, and EntityAsserters to override. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Query/Translations/BigIntegerTranslationsTest.cs | 11 ++++------- .../Query/Translations/EnumTranslationsTest.cs | 11 ++++------- .../NodaTime/NodaTimeQueryNpgsqlFixture.cs | 11 ++++------- .../Query/Translations/TimestampTranslationsTest.cs | 11 ++++------- 4 files changed, 16 insertions(+), 28 deletions(-) diff --git a/test/EFCore.PG.FunctionalTests/Query/Translations/BigIntegerTranslationsTest.cs b/test/EFCore.PG.FunctionalTests/Query/Translations/BigIntegerTranslationsTest.cs index 23f3f8aaf0..e3e9899ffe 100644 --- a/test/EFCore.PG.FunctionalTests/Query/Translations/BigIntegerTranslationsTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/Translations/BigIntegerTranslationsTest.cs @@ -144,7 +144,7 @@ public class Entity public BigInteger BigInteger { get; set; } } - public class BigIntegerQueryFixture : SharedStoreFixtureBase, IQueryFixtureBase, ITestSqlLoggerFactory + public class BigIntegerQueryFixture : QueryFixtureBase, ITestSqlLoggerFactory { private BigIntegerData? _expectedData; @@ -160,17 +160,14 @@ public TestSqlLoggerFactory TestSqlLoggerFactory protected override Task SeedAsync(BigIntegerQueryContext context) => BigIntegerQueryContext.SeedAsync(context); - public Func GetContextCreator() - => CreateContext; - - public ISetSource GetExpectedData() + public override ISetSource GetExpectedData() => _expectedData ??= new BigIntegerData(); - public IReadOnlyDictionary EntitySorters + public override IReadOnlyDictionary EntitySorters => new Dictionary> { { typeof(Entity), e => ((Entity)e).Id } } .ToDictionary(e => e.Key, e => (object)e.Value); - public IReadOnlyDictionary EntityAsserters + public override IReadOnlyDictionary EntityAsserters => new Dictionary> { { diff --git a/test/EFCore.PG.FunctionalTests/Query/Translations/EnumTranslationsTest.cs b/test/EFCore.PG.FunctionalTests/Query/Translations/EnumTranslationsTest.cs index dc14325937..ded37ae7ed 100644 --- a/test/EFCore.PG.FunctionalTests/Query/Translations/EnumTranslationsTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/Translations/EnumTranslationsTest.cs @@ -310,7 +310,7 @@ public enum UnmappedByteEnum : byte } // ReSharper disable once ClassNeverInstantiated.Global - public class EnumFixture : SharedStoreFixtureBase, IQueryFixtureBase, ITestSqlLoggerFactory + public class EnumFixture : QueryFixtureBase, ITestSqlLoggerFactory { protected override string StoreName => "EnumQueryTest"; @@ -342,17 +342,14 @@ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder build protected override Task SeedAsync(EnumContext context) => EnumContext.SeedAsync(context); - public Func GetContextCreator() - => CreateContext; - - public ISetSource GetExpectedData() + public override ISetSource GetExpectedData() => _expectedData ??= new EnumData(); - public IReadOnlyDictionary EntitySorters + public override IReadOnlyDictionary EntitySorters => new Dictionary> { { typeof(SomeEnumEntity), e => ((SomeEnumEntity)e)?.Id } } .ToDictionary(e => e.Key, e => (object)e.Value); - public IReadOnlyDictionary EntityAsserters + public override IReadOnlyDictionary EntityAsserters => new Dictionary> { { diff --git a/test/EFCore.PG.FunctionalTests/Query/Translations/NodaTime/NodaTimeQueryNpgsqlFixture.cs b/test/EFCore.PG.FunctionalTests/Query/Translations/NodaTime/NodaTimeQueryNpgsqlFixture.cs index 2903114543..18753fe18b 100644 --- a/test/EFCore.PG.FunctionalTests/Query/Translations/NodaTime/NodaTimeQueryNpgsqlFixture.cs +++ b/test/EFCore.PG.FunctionalTests/Query/Translations/NodaTime/NodaTimeQueryNpgsqlFixture.cs @@ -4,7 +4,7 @@ namespace Microsoft.EntityFrameworkCore.Query.Translations.NodaTime; -public class NodaTimeQueryNpgsqlFixture : SharedStoreFixtureBase, IQueryFixtureBase, ITestSqlLoggerFactory +public class NodaTimeQueryNpgsqlFixture : QueryFixtureBase, ITestSqlLoggerFactory { protected override string StoreName => "NodaTimeQueryTest"; @@ -36,17 +36,14 @@ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder build protected override Task SeedAsync(NodaTimeContext context) => NodaTimeContext.SeedAsync(context); - public Func GetContextCreator() - => CreateContext; - - public ISetSource GetExpectedData() + public override ISetSource GetExpectedData() => _expectedData ??= new NodaTimeData(); - public IReadOnlyDictionary EntitySorters + public override IReadOnlyDictionary EntitySorters => new Dictionary> { { typeof(NodaTimeTypes), e => ((NodaTimeTypes)e).Id } } .ToDictionary(e => e.Key, e => (object)e.Value); - public IReadOnlyDictionary EntityAsserters + public override IReadOnlyDictionary EntityAsserters => new Dictionary> { { diff --git a/test/EFCore.PG.FunctionalTests/Query/Translations/TimestampTranslationsTest.cs b/test/EFCore.PG.FunctionalTests/Query/Translations/TimestampTranslationsTest.cs index e67bf09db2..5dada1dd37 100644 --- a/test/EFCore.PG.FunctionalTests/Query/Translations/TimestampTranslationsTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/Translations/TimestampTranslationsTest.cs @@ -909,7 +909,7 @@ public class Entity public NpgsqlRange TimestampDateTimeRange { get; set; } } - public class TimestampQueryFixture : SharedStoreFixtureBase, IQueryFixtureBase, ITestSqlLoggerFactory + public class TimestampQueryFixture : QueryFixtureBase, ITestSqlLoggerFactory { protected override string StoreName => "TimestampQueryTest"; @@ -928,17 +928,14 @@ public TestSqlLoggerFactory TestSqlLoggerFactory protected override Task SeedAsync(TimestampQueryContext context) => TimestampQueryContext.SeedAsync(context); - public Func GetContextCreator() - => CreateContext; - - public ISetSource GetExpectedData() + public override ISetSource GetExpectedData() => _expectedData ??= new TimestampData(); - public IReadOnlyDictionary EntitySorters + public override IReadOnlyDictionary EntitySorters => new Dictionary> { { typeof(Entity), e => ((Entity)e)?.Id } } .ToDictionary(e => e.Key, e => (object)e.Value); - public IReadOnlyDictionary EntityAsserters + public override IReadOnlyDictionary EntityAsserters => new Dictionary> { { From bf6c5e3e1882e3fb33379985a29fdfb9b044719d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 12:44:18 +0000 Subject: [PATCH 3/3] Sync to EF 11.0.0-preview.3.26154.119 Co-authored-by: roji <1862641+roji@users.noreply.github.com> --- .../NonSharedModelBulkUpdatesNpgsqlTest.cs | 10 +- .../EntitySplittingNpgsqlTest.cs | 2 +- .../JsonTypesNpgsqlTest.cs | 2 +- .../MaterializationInterceptionNpgsqlTest.cs | 2 +- .../AdHocAdvancedMappingsQueryNpgsqlTest.cs | 2 +- .../Query/AdHocComplexTypeQueryNpgsqlTest.cs | 2 +- .../Query/AdHocJsonQueryNpgsqlTest.cs | 10 +- .../Query/AdHocManyToManyQueryNpgsqlTest.cs | 2 +- .../AdHocMiscellaneousQueryNpgsqlTest.cs | 2 +- .../Query/AdHocNavigationsQueryNpgsqlTest.cs | 2 +- .../Query/AdHocPrecompiledQueryNpgsqlTest.cs | 2 +- .../Query/AdHocQueryFiltersQueryNpgsqlTest.cs | 2 +- .../AdHocQuerySplittingQueryNpgsqlTest.cs | 4 +- .../Query/ArrayQueryFixture.cs | 11 +- .../Query/EntitySplittingQueryNpgsqlTest.cs | 2 +- ...aredPrimitiveCollectionsQueryNpgsqlTest.cs | 169 ------------------ .../Query/OperatorsQueryNpgsqlTest.cs | 6 +- .../Query/OwnedEntityQueryNpgsqlTest.cs | 2 +- .../PrimitiveCollectionsQueryNpgsqlTest.cs | 117 ++++++++++++ .../Query/SharedTypeQueryNpgsqlTest.cs | 2 +- .../Query/ToSqlQueryNpgsqlTest.cs | 2 +- .../JsonTranslationsNpgsqlTest.cs | 29 +-- .../TPTTableSplittingNpgsqlTest.cs | 2 +- .../TableSplittingNpgsqlTest.cs | 2 +- .../Update/NonSharedModelUpdatesNpgsqlTest.cs | 2 +- .../Update/StoredProcedureUpdateNpgsqlTest.cs | 6 +- 26 files changed, 164 insertions(+), 232 deletions(-) delete mode 100644 test/EFCore.PG.FunctionalTests/Query/NonSharedPrimitiveCollectionsQueryNpgsqlTest.cs diff --git a/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs index 98f4a1f9cb..0bce1baf8d 100644 --- a/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs @@ -2,7 +2,7 @@ namespace Microsoft.EntityFrameworkCore.BulkUpdates; public class NonSharedModelBulkUpdatesNpgsqlTest(NonSharedFixture fixture) : NonSharedModelBulkUpdatesRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; @@ -149,7 +149,7 @@ public override async Task Update_owned_and_non_owned_properties_with_table_shar public override async Task Update_main_table_in_entity_with_entity_splitting(bool async) { // Overridden/duplicated because we update DateTime, which Npgsql requires to be a UTC timestamp - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( onModelCreating: mb => mb.Entity() .ToTable("Blogs") .SplitToTable( @@ -166,7 +166,7 @@ public override async Task Update_main_table_in_entity_with_entity_splitting(boo await AssertUpdate( async, - contextFactory.CreateContext, + contextFactory.CreateDbContext, ss => ss.Set(), s => s.SetProperty(b => b.CreationTimestamp, b => new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc)), rowsAffectedCount: 1); @@ -226,7 +226,7 @@ SELECT COALESCE(sum(o0."Amount"), 0)::int [MemberData(nameof(IsAsyncData))] public virtual async Task Update_with_primitive_collection_in_value_selector(bool async) { - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( seed: async ctx => { ctx.AddRange(new EntityWithPrimitiveCollection { Tags = ["tag1", "tag2"] }); @@ -235,7 +235,7 @@ public virtual async Task Update_with_primitive_collection_in_value_selector(boo await Assert.ThrowsAsync(() => AssertUpdate( async, - contextFactory.CreateContext, + contextFactory.CreateDbContext, ss => ss.EntitiesWithPrimitiveCollection, s => s.SetProperty(x => x.Tags, x => x.Tags.Append("another_tag")), rowsAffectedCount: 1)); diff --git a/test/EFCore.PG.FunctionalTests/EntitySplittingNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/EntitySplittingNpgsqlTest.cs index def3b20285..823bc2d010 100644 --- a/test/EFCore.PG.FunctionalTests/EntitySplittingNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/EntitySplittingNpgsqlTest.cs @@ -3,6 +3,6 @@ namespace Microsoft.EntityFrameworkCore; public class EntitySplittingNpgsqlTest(NonSharedFixture fixture, ITestOutputHelper testOutputHelper) : EntitySplittingTestBase(fixture, testOutputHelper) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/JsonTypesNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/JsonTypesNpgsqlTest.cs index 9c68c0d66f..d6b4e5c315 100644 --- a/test/EFCore.PG.FunctionalTests/JsonTypesNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/JsonTypesNpgsqlTest.cs @@ -563,7 +563,7 @@ protected class LogSequenceNumberType public NpgsqlLogSequenceNumber LogSequenceNumber { get; set; } } - protected override ITestStoreFactory TestStoreFactory => NpgsqlTestStoreFactory.Instance; + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; protected override IServiceCollection AddServices(IServiceCollection serviceCollection) => serviceCollection.AddEntityFrameworkNpgsqlNetTopologySuite(); diff --git a/test/EFCore.PG.FunctionalTests/MaterializationInterceptionNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/MaterializationInterceptionNpgsqlTest.cs index 48e9f5bd7d..533727b413 100644 --- a/test/EFCore.PG.FunctionalTests/MaterializationInterceptionNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/MaterializationInterceptionNpgsqlTest.cs @@ -16,6 +16,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } } - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocAdvancedMappingsQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocAdvancedMappingsQueryNpgsqlTest.cs index 6d9c52e36d..7dad01f751 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocAdvancedMappingsQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocAdvancedMappingsQueryNpgsqlTest.cs @@ -3,7 +3,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocAdvancedMappingsQueryNpgsqlTest(NonSharedFixture fixture) : AdHocAdvancedMappingsQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; // Cannot write DateTime with Kind=Unspecified to PostgreSQL type 'timestamp with time zone', only UTC is supported. diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocComplexTypeQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocComplexTypeQueryNpgsqlTest.cs index 30f940e83f..f148a46e4c 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocComplexTypeQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocComplexTypeQueryNpgsqlTest.cs @@ -19,6 +19,6 @@ LIMIT 2 """); } - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocJsonQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocJsonQueryNpgsqlTest.cs index ffeb482f72..533339a395 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocJsonQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocJsonQueryNpgsqlTest.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocJsonQueryNpgsqlTest(NonSharedFixture fixture) : AdHocJsonQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; protected override async Task Seed29219(DbContext ctx) @@ -179,7 +179,7 @@ protected override Task SeedBadJsonProperties(ContextBadJsonProperties ctx) [ConditionalTheory, MemberData(nameof(IsAsyncData))] public virtual async Task Json_predicate_on_bytea(bool async) { - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( seed: async context => { context.Entities.AddRange( @@ -188,7 +188,7 @@ public virtual async Task Json_predicate_on_bytea(bool async) await context.SaveChangesAsync(); }); - using (var context = contextFactory.CreateContext()) + using (var context = contextFactory.CreateDbContext()) { var query = context.Entities.Where(x => x.JsonEntity.Bytea == new byte[] { 1, 2, 4 }); @@ -211,7 +211,7 @@ LIMIT 2 [ConditionalTheory, MemberData(nameof(IsAsyncData))] public virtual async Task Json_predicate_on_interval(bool async) { - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( seed: async context => { context.Entities.AddRange( @@ -220,7 +220,7 @@ public virtual async Task Json_predicate_on_interval(bool async) await context.SaveChangesAsync(); }); - using (var context = contextFactory.CreateContext()) + using (var context = contextFactory.CreateDbContext()) { var query = context.Entities.Where(x => x.JsonEntity.Interval == new TimeSpan(2, 2, 3, 4, 123, 456)); diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocManyToManyQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocManyToManyQueryNpgsqlTest.cs index c06db71b45..b9527f9a20 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocManyToManyQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocManyToManyQueryNpgsqlTest.cs @@ -2,6 +2,6 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocManyToManyQueryNpgsqlTest(NonSharedFixture fixture) : AdHocManyToManyQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocMiscellaneousQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocMiscellaneousQueryNpgsqlTest.cs index aa9f5700e9..9067340a93 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocMiscellaneousQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocMiscellaneousQueryNpgsqlTest.cs @@ -4,7 +4,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocMiscellaneousQueryNpgsqlTest(NonSharedFixture fixture) : AdHocMiscellaneousQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; protected override DbContextOptionsBuilder SetParameterizedCollectionMode(DbContextOptionsBuilder optionsBuilder, ParameterTranslationMode parameterizedCollectionMode) diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocNavigationsQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocNavigationsQueryNpgsqlTest.cs index 023bd30eca..c1e5fd1936 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocNavigationsQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocNavigationsQueryNpgsqlTest.cs @@ -6,6 +6,6 @@ public class AdHocNavigationsQueryNpgsqlTest(NonSharedFixture fixture) : AdHocNa public override Task Reference_include_on_derived_type_with_sibling_works() => Assert.ThrowsAsync(() => base.Reference_include_on_derived_type_with_sibling_works()); - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocPrecompiledQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocPrecompiledQueryNpgsqlTest.cs index f593297f48..99e444ca26 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocPrecompiledQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocPrecompiledQueryNpgsqlTest.cs @@ -101,7 +101,7 @@ public override async Task Projecting_entity_with_property_requiring_converter_w public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; protected override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocQueryFiltersQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocQueryFiltersQueryNpgsqlTest.cs index ac65f0f1f8..7a50c2912c 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocQueryFiltersQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocQueryFiltersQueryNpgsqlTest.cs @@ -3,6 +3,6 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocQueryFiltersQueryNpgsqlTest(NonSharedFixture fixture) : AdHocQueryFiltersQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/AdHocQuerySplittingQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/AdHocQuerySplittingQueryNpgsqlTest.cs index 49d04a010c..a305407aaf 100644 --- a/test/EFCore.PG.FunctionalTests/Query/AdHocQuerySplittingQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/AdHocQuerySplittingQueryNpgsqlTest.cs @@ -7,7 +7,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class AdHocQuerySplittingQueryNpgsqlTest(NonSharedFixture fixture) : AdHocQuerySplittingQueryTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; private static readonly FieldInfo _querySplittingBehaviorFieldInfo = @@ -41,7 +41,7 @@ protected override DbContextOptionsBuilder ClearQuerySplittingBehavior(DbContext protected override TestStore CreateTestStore25225() { - var testStore = NpgsqlTestStore.Create(StoreName); + var testStore = NpgsqlTestStore.Create(NonSharedStoreName); testStore.UseConnectionString = true; return testStore; } diff --git a/test/EFCore.PG.FunctionalTests/Query/ArrayQueryFixture.cs b/test/EFCore.PG.FunctionalTests/Query/ArrayQueryFixture.cs index 7ea9d7176d..d832180958 100644 --- a/test/EFCore.PG.FunctionalTests/Query/ArrayQueryFixture.cs +++ b/test/EFCore.PG.FunctionalTests/Query/ArrayQueryFixture.cs @@ -2,7 +2,7 @@ namespace Microsoft.EntityFrameworkCore.Query; -public abstract class ArrayQueryFixture : SharedStoreFixtureBase, IQueryFixtureBase, ITestSqlLoggerFactory +public abstract class ArrayQueryFixture : QueryFixtureBase, ITestSqlLoggerFactory { protected override ITestStoreFactory TestStoreFactory => NpgsqlTestStoreFactory.Instance; @@ -18,19 +18,16 @@ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder build protected override Task SeedAsync(ArrayQueryContext context) => ArrayQueryContext.SeedAsync(context); - public Func GetContextCreator() - => CreateContext; - - public ISetSource GetExpectedData() + public override ISetSource GetExpectedData() => _expectedData ??= new ArrayQueryData(); - public IReadOnlyDictionary EntitySorters + public override IReadOnlyDictionary EntitySorters => new Dictionary> { { typeof(ArrayEntity), e => ((ArrayEntity)e).Id }, { typeof(ArrayContainerEntity), e => ((ArrayContainerEntity)e)?.Id } }.ToDictionary(e => e.Key, e => (object)e.Value); - public IReadOnlyDictionary EntityAsserters + public override IReadOnlyDictionary EntityAsserters => new Dictionary> { { diff --git a/test/EFCore.PG.FunctionalTests/Query/EntitySplittingQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/EntitySplittingQueryNpgsqlTest.cs index 210303d026..f9ff56eb76 100644 --- a/test/EFCore.PG.FunctionalTests/Query/EntitySplittingQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/EntitySplittingQueryNpgsqlTest.cs @@ -786,6 +786,6 @@ public override async Task Tpc_entity_owning_a_split_collection_on_leaf(bool asy AssertSql(); } - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/NonSharedPrimitiveCollectionsQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/NonSharedPrimitiveCollectionsQueryNpgsqlTest.cs deleted file mode 100644 index 5ea8bc4860..0000000000 --- a/test/EFCore.PG.FunctionalTests/Query/NonSharedPrimitiveCollectionsQueryNpgsqlTest.cs +++ /dev/null @@ -1,169 +0,0 @@ -using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure; - -namespace Microsoft.EntityFrameworkCore.Query; - -public class NonSharedPrimitiveCollectionsQueryNpgsqlTest(NonSharedFixture fixture) - : NonSharedPrimitiveCollectionsQueryRelationalTestBase(fixture) -{ - protected override DbContextOptionsBuilder SetParameterizedCollectionMode(DbContextOptionsBuilder optionsBuilder, ParameterTranslationMode parameterizedCollectionMode) - { - new NpgsqlDbContextOptionsBuilder(optionsBuilder).UseParameterizedCollectionMode(parameterizedCollectionMode); - - return optionsBuilder; - } - - #region Support for specific element types - - // Since we just use arrays for primitive collections, there's no need to test each and every element type; arrays are fully typed - // and don't need any special conversion/handling like in providers which use JSON. - - // Npgsql maps DateTime to timestamp with time zone by default, which requires UTC timestamps. - public override Task Array_of_DateTime() - => TestArray( - new DateTime(2023, 1, 1, 12, 30, 0), - new DateTime(2023, 1, 2, 12, 30, 0), - mb => mb.Entity() - .Property(typeof(DateTime[]), "SomeArray") - .HasColumnType("timestamp without time zone[]")); - - // Npgsql maps DateTime to timestamp with time zone by default, which requires UTC timestamps. - public override Task Array_of_DateTime_with_milliseconds() - => TestArray( - new DateTime(2023, 1, 1, 12, 30, 0, 123), - new DateTime(2023, 1, 1, 12, 30, 0, 124), - mb => mb.Entity() - .Property(typeof(DateTime[]), "SomeArray") - .HasColumnType("timestamp without time zone[]")); - - // Npgsql maps DateTime to timestamp with time zone by default, which requires UTC timestamps. - public override Task Array_of_DateTime_with_microseconds() - => TestArray( - new DateTime(2023, 1, 1, 12, 30, 0, 123, 456), - new DateTime(2023, 1, 1, 12, 30, 0, 123, 457), - mb => mb.Entity() - .Property(typeof(DateTime[]), "SomeArray") - .HasColumnType("timestamp without time zone[]")); - - [ConditionalFact] - public virtual Task Array_of_DateTime_utc() - => TestArray( - new DateTime(2023, 1, 1, 12, 30, 0, DateTimeKind.Utc), - new DateTime(2023, 1, 2, 12, 30, 0, DateTimeKind.Utc)); - - // Npgsql only supports DateTimeOffset with Offset 0 (mapped to timestamp with time zone) - public override Task Array_of_DateTimeOffset() - => TestArray( - new DateTimeOffset(2023, 1, 1, 12, 30, 0, TimeSpan.Zero), - new DateTimeOffset(2023, 1, 2, 12, 30, 0, TimeSpan.Zero)); - - [ConditionalFact] - public override async Task Multidimensional_array_is_not_supported() - { - // Multidimensional arrays are supported in PostgreSQL (via the regular array type); the EFCore.PG maps .NET - // multidimensional arrays. However, arrays of multidimensional arrays aren't supported (since arrays of arrays generally aren't - // supported). - var contextFactory = await InitializeAsync( - mb => mb.Entity().Property("MultidimensionalArray"), - seed: async context => - { - var entry = context.Add(new TestEntity()); - entry.Property("MultidimensionalArray").CurrentValue = new[,] { { 1, 2 }, { 3, 4 } }; - await context.SaveChangesAsync(); - }); - - await using var context = contextFactory.CreateContext(); - - var arrays = new[] { new[,] { { 1, 2 }, { 3, 4 } }, new[,] { { 1, 2 }, { 3, 5 } } }; - - await Assert.ThrowsAsync( - () => - context.Set().Where(t => arrays.Contains(EF.Property(t, "MultidimensionalArray"))).ToArrayAsync()); - } - - #endregion Support for specific element types - - public override async Task Column_collection_inside_json_owned_entity() - { - await base.Column_collection_inside_json_owned_entity(); - - AssertSql( - """ -SELECT t."Id", t."Owned" -FROM "TestOwner" AS t -WHERE jsonb_array_length(t."Owned" -> 'Strings') = 2 -LIMIT 2 -""", - // - """ -SELECT t."Id", t."Owned" -FROM "TestOwner" AS t -WHERE (t."Owned" #>> '{Strings,1}') = 'bar' -LIMIT 2 -"""); - } - - #region Contains with various index methods - - // For Contains over column collections that have a (modeled) GIN index, we translate to the containment operator (@>). - // Otherwise we translate to the ANY construct. - [ConditionalFact] - public virtual async Task Column_collection_Contains_with_GIN_index_uses_containment() - { - var contextFactory = await InitializeAsync( - onModelCreating: mb => mb.Entity() - .HasIndex(e => e.Ints) - .HasMethod("GIN"), - seed: context => - { - context.AddRange( - new TestEntity { Id = 1, Ints = [1, 2, 3] }, - new TestEntity { Id = 2, Ints = [1, 2, 4] }); - return context.SaveChangesAsync(); - }); - - await using var context = contextFactory.CreateContext(); - - var result = await context.Set().Where(c => c.Ints!.Contains(4)).SingleAsync(); - Assert.Equal(2, result.Id); - - AssertSql( - """ -SELECT t."Id", t."Ints" -FROM "TestEntity" AS t -WHERE t."Ints" @> ARRAY[4]::integer[] -LIMIT 2 -"""); - } - - [ConditionalFact] - public virtual async Task Column_collection_Contains_with_btree_index_does_not_use_containment() - { - var contextFactory = await InitializeAsync( - onModelCreating: mb => mb.Entity().HasIndex(e => e.Ints), - seed: context => - { - context.AddRange( - new TestEntity { Id = 1, Ints = [1, 2, 3] }, - new TestEntity { Id = 2, Ints = [1, 2, 4] }); - return context.SaveChangesAsync(); - }); - - await using var context = contextFactory.CreateContext(); - - var result = await context.Set().Where(c => c.Ints!.Contains(4)).SingleAsync(); - Assert.Equal(2, result.Id); - - AssertSql( - """ -SELECT t."Id", t."Ints" -FROM "TestEntity" AS t -WHERE 4 = ANY (t."Ints") -LIMIT 2 -"""); - } - - #endregion Contains with various index methods - - protected override ITestStoreFactory TestStoreFactory - => NpgsqlTestStoreFactory.Instance; -} diff --git a/test/EFCore.PG.FunctionalTests/Query/OperatorsQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/OperatorsQueryNpgsqlTest.cs index 7d453214f8..f4f29a20bb 100644 --- a/test/EFCore.PG.FunctionalTests/Query/OperatorsQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/OperatorsQueryNpgsqlTest.cs @@ -4,7 +4,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class OperatorsQueryNpgsqlTest(NonSharedFixture fixture) : OperatorsQueryTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; protected void AssertSql(params string[] expected) @@ -152,7 +152,7 @@ LIMIT 2 [ConditionalFact] public virtual async Task AtTimeZone_and_addition() { - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( seed: async context => { context.Set().AddRange( @@ -162,7 +162,7 @@ public virtual async Task AtTimeZone_and_addition() }, onModelCreating: modelBuilder => modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever()); - await using var context = contextFactory.CreateContext(); + await using var context = contextFactory.CreateDbContext(); var result = await context.Set() .Where(b => new DateOnly(2020, 1, 15) > DateOnly.FromDateTime(b.Value.AddDays(1))) diff --git a/test/EFCore.PG.FunctionalTests/Query/OwnedEntityQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/OwnedEntityQueryNpgsqlTest.cs index 3f540a3b3e..bc0bc558c3 100644 --- a/test/EFCore.PG.FunctionalTests/Query/OwnedEntityQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/OwnedEntityQueryNpgsqlTest.cs @@ -2,6 +2,6 @@ namespace Microsoft.EntityFrameworkCore.Query; public class OwnedEntityQueryNpgsqlTest(NonSharedFixture fixture) : OwnedEntityQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs index 11c5da52f7..663c6c1eea 100644 --- a/test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs @@ -1,3 +1,5 @@ +using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure; + namespace Microsoft.EntityFrameworkCore.Query; public class PrimitiveCollectionsQueryNpgsqlTest : PrimitiveCollectionsQueryRelationalTestBase< @@ -2598,6 +2600,121 @@ WHERE NOT (p."Int" = ANY (@ints) AND p."Int" = ANY (@ints) IS NOT NULL) """); } + [ConditionalFact] + public override async Task Multidimensional_array_is_not_supported() + { + // Multidimensional arrays are supported in PostgreSQL (via the regular array type); the EFCore.PG maps .NET + // multidimensional arrays. However, arrays of multidimensional arrays aren't supported (since arrays of arrays generally aren't + // supported). + var contextFactory = await InitializeNonSharedTest( + mb => mb.Entity().Property("MultidimensionalArray"), + seed: async context => + { + var entry = context.Add(new TestEntity()); + entry.Property("MultidimensionalArray").CurrentValue = new[,] { { 1, 2 }, { 3, 4 } }; + await context.SaveChangesAsync(); + }); + + await using var context = contextFactory.CreateDbContext(); + + var arrays = new[] { new[,] { { 1, 2 }, { 3, 4 } }, new[,] { { 1, 2 }, { 3, 5 } } }; + + await Assert.ThrowsAsync( + () => + context.Set().Where(t => arrays.Contains(EF.Property(t, "MultidimensionalArray"))).ToArrayAsync()); + } + + public override async Task Column_collection_inside_json_owned_entity() + { + await base.Column_collection_inside_json_owned_entity(); + + AssertSql( + """ +SELECT t."Id", t."Owned" +FROM "TestOwner" AS t +WHERE jsonb_array_length(t."Owned" -> 'Strings') = 2 +LIMIT 2 +""", + // + """ +SELECT t."Id", t."Owned" +FROM "TestOwner" AS t +WHERE (t."Owned" #>> '{Strings,1}') = 'bar' +LIMIT 2 +"""); + } + + #region Contains with various index methods + + // For Contains over column collections that have a (modeled) GIN index, we translate to the containment operator (@>). + // Otherwise we translate to the ANY construct. + [ConditionalFact] + public virtual async Task Column_collection_Contains_with_GIN_index_uses_containment() + { + var contextFactory = await InitializeNonSharedTest( + onModelCreating: mb => mb.Entity() + .HasIndex(e => e.Ints) + .HasMethod("GIN"), + seed: context => + { + context.AddRange( + new TestEntity { Id = 1, Ints = [1, 2, 3] }, + new TestEntity { Id = 2, Ints = [1, 2, 4] }); + return context.SaveChangesAsync(); + }); + + await using var context = contextFactory.CreateDbContext(); + + var result = await context.Set().Where(c => c.Ints!.Contains(4)).SingleAsync(); + Assert.Equal(2, result.Id); + + AssertSql( + """ +SELECT t."Id", t."Ints" +FROM "TestEntity" AS t +WHERE t."Ints" @> ARRAY[4]::integer[] +LIMIT 2 +"""); + } + + [ConditionalFact] + public virtual async Task Column_collection_Contains_with_btree_index_does_not_use_containment() + { + var contextFactory = await InitializeNonSharedTest( + onModelCreating: mb => mb.Entity().HasIndex(e => e.Ints), + seed: context => + { + context.AddRange( + new TestEntity { Id = 1, Ints = [1, 2, 3] }, + new TestEntity { Id = 2, Ints = [1, 2, 4] }); + return context.SaveChangesAsync(); + }); + + await using var context = contextFactory.CreateDbContext(); + + var result = await context.Set().Where(c => c.Ints!.Contains(4)).SingleAsync(); + Assert.Equal(2, result.Id); + + AssertSql( + """ +SELECT t."Id", t."Ints" +FROM "TestEntity" AS t +WHERE 4 = ANY (t."Ints") +LIMIT 2 +"""); + } + + #endregion Contains with various index methods + + protected override DbContextOptionsBuilder SetParameterizedCollectionMode( + DbContextOptionsBuilder optionsBuilder, + ParameterTranslationMode parameterizedCollectionMode) + { + new NpgsqlDbContextOptionsBuilder(optionsBuilder).UseParameterizedCollectionMode(parameterizedCollectionMode); + + return optionsBuilder; + } + [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); diff --git a/test/EFCore.PG.FunctionalTests/Query/SharedTypeQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/SharedTypeQueryNpgsqlTest.cs index f217715c7a..067f1bd91f 100644 --- a/test/EFCore.PG.FunctionalTests/Query/SharedTypeQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/SharedTypeQueryNpgsqlTest.cs @@ -2,7 +2,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class SharedTypeQueryNpgsqlTest(NonSharedFixture fixture) : SharedTypeQueryRelationalTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; public override Task Can_use_shared_type_entity_type_in_query_filter_with_from_sql(bool async) diff --git a/test/EFCore.PG.FunctionalTests/Query/ToSqlQueryNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/ToSqlQueryNpgsqlTest.cs index 96ea46d874..cd2438746d 100644 --- a/test/EFCore.PG.FunctionalTests/Query/ToSqlQueryNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/ToSqlQueryNpgsqlTest.cs @@ -2,7 +2,7 @@ namespace Microsoft.EntityFrameworkCore.Query; public class ToSqlQuerySqlServerTest(NonSharedFixture fixture) : ToSqlQueryTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; [ConditionalFact] diff --git a/test/EFCore.PG.FunctionalTests/Query/Translations/JsonTranslationsNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Query/Translations/JsonTranslationsNpgsqlTest.cs index 9e05869706..8d96701eb8 100644 --- a/test/EFCore.PG.FunctionalTests/Query/Translations/JsonTranslationsNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Query/Translations/JsonTranslationsNpgsqlTest.cs @@ -10,26 +10,26 @@ public JsonTranslationsNpgsqlTest(JsonTranslationsQueryNpgsqlFixture fixture, IT } - public override async Task JsonExists_on_scalar_string_column() + public override async Task JsonPathExists_on_scalar_string_column() { // TODO: #3733 - await AssertTranslationFailed(base.JsonExists_on_scalar_string_column); + await AssertTranslationFailed(base.JsonPathExists_on_scalar_string_column); AssertSql(); } - public override async Task JsonExists_on_complex_property() + public override async Task JsonPathExists_on_complex_property() { // TODO: #3733 - await AssertTranslationFailed(base.JsonExists_on_complex_property); + await AssertTranslationFailed(base.JsonPathExists_on_complex_property); AssertSql(); } - public override async Task JsonExists_on_owned_entity() + public override async Task JsonPathExists_on_owned_entity() { // TODO: #3733 - await AssertTranslationFailed(base.JsonExists_on_owned_entity); + await AssertTranslationFailed(base.JsonPathExists_on_owned_entity); AssertSql(); } @@ -46,21 +46,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity().Property(e => e.JsonString).HasColumnType("jsonb"); } - protected override string RemoveJsonProperty(string column, string jsonPath) - { - // HACK. PostgreSQL doesn't have a delete function accepting JSON path, but the base class requires this - // only for a single path segment, which we can do. Rethink this mechanism in EF. - if (jsonPath.StartsWith("$.")) - { - var segment = jsonPath[2..]; - if (!segment.Contains('.')) - { - return $"{column} - '{segment}'"; - } - } - - throw new UnreachableException(); - } + protected override string RemoveJsonProperty(string column, string property) + => $"{column} - '{property}'"; } [ConditionalFact] diff --git a/test/EFCore.PG.FunctionalTests/TPTTableSplittingNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/TPTTableSplittingNpgsqlTest.cs index 7c35b9b244..3c2c1c6494 100644 --- a/test/EFCore.PG.FunctionalTests/TPTTableSplittingNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/TPTTableSplittingNpgsqlTest.cs @@ -7,6 +7,6 @@ public override Task Can_insert_dependent_with_just_one_parent() // This scenario is not valid for TPT => Task.CompletedTask; - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/TableSplittingNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/TableSplittingNpgsqlTest.cs index ca7b8f12c5..6e626746e6 100644 --- a/test/EFCore.PG.FunctionalTests/TableSplittingNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/TableSplittingNpgsqlTest.cs @@ -6,7 +6,7 @@ namespace Microsoft.EntityFrameworkCore; public class TableSplittingNpgsqlTest(NonSharedFixture fixture, ITestOutputHelper testOutputHelper) : TableSplittingTestBase(fixture, testOutputHelper) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; public override async Task ExecuteUpdate_works_for_table_sharing(bool async) diff --git a/test/EFCore.PG.FunctionalTests/Update/NonSharedModelUpdatesNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Update/NonSharedModelUpdatesNpgsqlTest.cs index 9d4a5206b1..6cc0103376 100644 --- a/test/EFCore.PG.FunctionalTests/Update/NonSharedModelUpdatesNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Update/NonSharedModelUpdatesNpgsqlTest.cs @@ -2,6 +2,6 @@ namespace Microsoft.EntityFrameworkCore.Update; public class NonSharedModelUpdatesNpgsqlTest(NonSharedFixture fixture) : NonSharedModelUpdatesTestBase(fixture) { - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; } diff --git a/test/EFCore.PG.FunctionalTests/Update/StoredProcedureUpdateNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/Update/StoredProcedureUpdateNpgsqlTest.cs index 0655904619..90bbf60013 100644 --- a/test/EFCore.PG.FunctionalTests/Update/StoredProcedureUpdateNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/Update/StoredProcedureUpdateNpgsqlTest.cs @@ -238,7 +238,7 @@ public virtual async Task Rows_affected_parameter_with_another_output_parameter( END $$ """; - var contextFactory = await InitializeAsync( + var contextFactory = await InitializeNonSharedTest( modelBuilder => modelBuilder.Entity() .UpdateUsingStoredProcedure( nameof(EntityWithAdditionalProperty) + "_Update", @@ -250,7 +250,7 @@ public virtual async Task Rows_affected_parameter_with_another_output_parameter( .Property(w => w.AdditionalProperty).HasComputedColumnSql("8", stored: true), seed: ctx => CreateStoredProcedures(ctx, createSprocSql)); - await using var context = contextFactory.CreateContext(); + await using var context = contextFactory.CreateDbContext(); var entity = new EntityWithAdditionalProperty { Name = "Initial" }; context.Set().Add(entity); @@ -560,6 +560,6 @@ protected override void ConfigureStoreGeneratedConcurrencyToken(EntityTypeBuilde .ValueGeneratedOnAddOrUpdate() .IsConcurrencyToken(); - protected override ITestStoreFactory TestStoreFactory + protected override ITestStoreFactory NonSharedTestStoreFactory => NpgsqlTestStoreFactory.Instance; }