You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.FunctionalTests/GraphUpdates/ProxyGraphUpdatesJetTest.cs

139 lines
7.6 KiB
C#

// 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>(TFixture fixture)
: ProxyGraphUpdatesTestBase<TFixture>(fixture)
where TFixture : ProxyGraphUpdatesJetTestBase<TFixture>.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<SharedFkRoot>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkDependant>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkParent>().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<LazyLoading.ProxyGraphUpdatesWithLazyLoadingJetFixture>(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<SharedFkRoot>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkDependant>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkParent>().Property(x => x.Id).HasColumnType("int");
}
}
}
public class ChangeTracking(ChangeTracking.ProxyGraphUpdatesWithChangeTrackingJetFixture fixture)
: ProxyGraphUpdatesJetTestBase<ChangeTracking.ProxyGraphUpdatesWithChangeTrackingJetFixture>(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<SharedFkRoot>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkDependant>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkParent>().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<SharedFkRoot>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkDependant>().Property(x => x.Id).HasColumnType("int");
modelBuilder.Entity<SharedFkParent>().Property(x => x.Id).HasColumnType("int");
}
}
}
}
}