// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using System.Threading.Tasks; namespace EntityFrameworkCore.Jet.FunctionalTests { public abstract class ProxyGraphUpdatesJetTest { public abstract class ProxyGraphUpdatesJetTestBase(TFixture fixture) : ProxyGraphUpdatesTestBase(fixture) where TFixture : ProxyGraphUpdatesJetTestBase.ProxyGraphUpdatesJetFixtureBase, new() { protected override void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) => facade.UseTransaction(transaction.GetDbTransaction()); public abstract class ProxyGraphUpdatesJetFixtureBase : ProxyGraphUpdatesFixtureBase { public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { base.OnModelCreating(modelBuilder, context); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); } protected override async Task SeedAsync(DbContext context) { //context.Database.ExecuteSql($"ALTER TABLE `SharedFkDependant` DROP CONSTRAINT `AK_SharedFkDependant_RootId_Id`"); await base.SeedAsync(context); await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalComposite2` DROP CONSTRAINT `FK_OptionalComposite2_OptionalAk1_ParentId_ParentAlternateId`"); //await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalOverlapping2` DROP CONSTRAINT `FK_OptionalOverlapping2_RequiredComposite1_ParentId_ParentAlter~`"); await context.Database.ExecuteSqlAsync($"ALTER TABLE `OptionalSingleComposite2` DROP CONSTRAINT `FK_OptionalSingleComposite2_OptionalSingleAk1_BackId_ParentAlte~`"); //await context.Database.ExecuteSqlAsync($"ALTER TABLE `RequiredComposite2` DROP CONSTRAINT `FK_RequiredComposite2_RequiredAk1_ParentId_ParentAlternateId`"); await context.Database.ExecuteSqlAsync($"ALTER TABLE `SharedFkParent` DROP CONSTRAINT `FK_SharedFkParent_SharedFkDependant_RootId_DependantId`"); } } } public class LazyLoading(LazyLoading.ProxyGraphUpdatesWithLazyLoadingJetFixture fixture) : ProxyGraphUpdatesJetTestBase(fixture) { protected override bool DoesLazyLoading => true; protected override bool DoesChangeTracking => false; public class ProxyGraphUpdatesWithLazyLoadingJetFixture : ProxyGraphUpdatesJetFixtureBase { protected override string StoreName { get; } = "ProxyGraphLazyLoadingUpdatesTest"; public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base.AddOptions(builder.UseLazyLoadingProxies()); protected override IServiceCollection AddServices(IServiceCollection serviceCollection) => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { modelBuilder.UseJetIdentityColumns(); base.OnModelCreating(modelBuilder, context); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); } } } public class ChangeTracking(ChangeTracking.ProxyGraphUpdatesWithChangeTrackingJetFixture fixture) : ProxyGraphUpdatesJetTestBase(fixture) { protected override bool DoesLazyLoading => false; protected override bool DoesChangeTracking => true; public class ProxyGraphUpdatesWithChangeTrackingJetFixture : ProxyGraphUpdatesJetFixtureBase { protected override string StoreName { get; } = "ProxyGraphChangeTrackingUpdatesTest"; public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base.AddOptions(builder.UseChangeTrackingProxies()); protected override IServiceCollection AddServices(IServiceCollection serviceCollection) => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { modelBuilder.UseJetIdentityColumns(); base.OnModelCreating(modelBuilder, context); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); } } } public class ChangeTrackingAndLazyLoading( ChangeTrackingAndLazyLoading.ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingJetFixture fixture) : ProxyGraphUpdatesJetTestBase< ChangeTrackingAndLazyLoading.ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingJetFixture>(fixture) { protected override bool DoesLazyLoading => true; protected override bool DoesChangeTracking => true; public class ProxyGraphUpdatesWithChangeTrackingAndLazyLoadingJetFixture : ProxyGraphUpdatesJetFixtureBase { protected override string StoreName { get; } = "ProxyGraphChangeTrackingAndLazyLoadingUpdatesTest"; public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) => base.AddOptions(builder.UseLazyLoadingProxies().UseChangeTrackingProxies()); protected override IServiceCollection AddServices(IServiceCollection serviceCollection) => base.AddServices(serviceCollection.AddEntityFrameworkProxies()); protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { modelBuilder.UseJetIdentityColumns(); base.OnModelCreating(modelBuilder, context); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); modelBuilder.Entity().Property(x => x.Id).HasColumnType("int"); } } } } }