public virtual void Can_change_principal_and_dependent_instance_non_derived()
        {
            using (CreateTestStore(
                       modelBuilder =>
            {
                OnModelCreating(modelBuilder);
                modelBuilder.Entity <Engine>().ToTable("Engines");
                modelBuilder.Entity <FuelTank>(
                    eb =>
                {
                    eb.ToTable("FuelTanks");
                    eb.HasOne(e => e.Engine)
                    .WithOne(e => e.FuelTank)
                    .HasForeignKey <FuelTank>(e => e.VehicleName)
                    .OnDelete(DeleteBehavior.Restrict);
                });
                modelBuilder.Ignore <SolidFuelTank>();
                modelBuilder.Ignore <SolidRocket>();
            }))
            {
                using (var context = CreateContext())
                {
                    var bike = context.Vehicles.Include(v => v.Operator).Single(v => v.Name == "Trek Pro Fit Madone 6 Series");

                    var newBike = new Vehicle
                    {
                        Name     = "Trek Pro Fit Madone 6 Series",
                        Operator = new LicensedOperator
                        {
                            Name        = "repairman",
                            LicenseType = "Repair"
                        },
                        SeatingCapacity = 2
                    };

                    context.Remove(bike);
                    context.Add(newBike);

                    TestSqlLoggerFactory.Clear();
                    context.SaveChanges();

                    Assert.Empty(context.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged));
                }

                using (var context = CreateContext())
                {
                    var bike = context.Vehicles.Include(v => v.Operator).Single(v => v.Name == "Trek Pro Fit Madone 6 Series");
                    Assert.Equal(2, bike.SeatingCapacity);
                    Assert.Equal("repairman", bike.Operator.Name);
                    Assert.Equal("Repair", ((LicensedOperator)bike.Operator).LicenseType);
                }
            }
        }
示例#2
0
        public virtual void Can_change_dependent_instance_non_derived()
        {
            using (CreateTestStore(
                       modelBuilder =>
            {
                OnModelCreating(modelBuilder);
                modelBuilder.Entity <Engine>().ToTable("Engines");
                modelBuilder.Entity <FuelTank>(
                    eb =>
                {
                    eb.ToTable("FuelTanks");
                    eb.HasOne(e => e.Engine)
                    .WithOne(e => e.FuelTank)
                    .HasForeignKey <FuelTank>(e => e.VehicleName)
                    .OnDelete(DeleteBehavior.Restrict);
                });
                modelBuilder.Ignore <SolidFuelTank>();
                modelBuilder.Ignore <SolidRocket>();
            }))
            {
                using (var context = CreateContext())
                {
                    var bike = context.Vehicles.Include(v => v.Operator).Single(v => v.Name == "Trek Pro Fit Madone 6 Series");

                    bike.Operator = new Operator
                    {
                        Name = "Chris Horner"
                    };

                    context.ChangeTracker.DetectChanges();

                    bike.Operator = new LicensedOperator
                    {
                        Name        = "repairman",
                        LicenseType = "Repair"
                    };

                    TestSqlLoggerFactory.Clear();
                    context.SaveChanges();
                }

                using (var context = CreateContext())
                {
                    var bike = context.Vehicles.Include(v => v.Operator).Single(v => v.Name == "Trek Pro Fit Madone 6 Series");
                    Assert.Equal("repairman", bike.Operator.Name);

                    Assert.Equal("Repair", ((LicensedOperator)bike.Operator).LicenseType);
                }
            }
        }
        public override void Can_change_principal_instance_non_derived()
        {
            base.Can_change_principal_instance_non_derived();

            TestSqlLoggerFactory.AssertBaseline(new[] {
                @"@p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 450)
@p0='2'

SET NOCOUNT ON;
UPDATE [Vehicles] SET [SeatingCapacity] = @p0
WHERE [Name] = @p1;
SELECT @@ROWCOUNT;"
            }, assertOrder: false);
        }
示例#4
0
        public virtual async Task Can_change_principal_instance_non_derived()
        {
            await InitializeAsync(
                modelBuilder =>
            {
                OnModelCreating(modelBuilder);
                modelBuilder.Entity <Engine>().ToTable("Engines");
                modelBuilder.Entity <FuelTank>(
                    eb =>
                {
                    eb.ToTable("FuelTanks");
                    eb.HasOne(e => e.Engine)
                    .WithOne(e => e.FuelTank)
                    .HasForeignKey <FuelTank>(e => e.VehicleName)
                    .OnDelete(DeleteBehavior.Restrict);
                });
                modelBuilder.Ignore <SolidFuelTank>();
                modelBuilder.Ignore <SolidRocket>();
            });

            using (var context = CreateContext())
            {
                var bike = context.Vehicles.Single(v => v.Name == "Trek Pro Fit Madone 6 Series");

                var newBike = new Vehicle
                {
                    Name            = "Trek Pro Fit Madone 6 Series",
                    Operator        = bike.Operator,
                    SeatingCapacity = 2
                };

                context.Remove(bike);
                context.Add(newBike);

                TestSqlLoggerFactory.Clear();
                context.SaveChanges();

                Assert.Empty(context.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged));
            }

            using (var context = CreateContext())
            {
                var bike = context.Vehicles.Include(v => v.Operator).Single(v => v.Name == "Trek Pro Fit Madone 6 Series");

                Assert.Equal(2, bike.SeatingCapacity);
                Assert.NotNull(bike.Operator);
            }
        }
        public override void Can_change_dependent_instance_non_derived()
        {
            base.Can_change_dependent_instance_non_derived();

            TestSqlLoggerFactory.AssertBaseline(new [] {
                @"@p3='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 450)
@p0='LicensedOperator' (Nullable = false) (Size = 4000)
@p1='repairman' (Size = 4000)
@p2='Repair' (Size = 4000)

SET NOCOUNT ON;
UPDATE [Vehicles] SET [Operator_Discriminator] = @p0, [Operator_Name] = @p1, [LicenseType] = @p2
WHERE [Name] = @p3;
SELECT @@ROWCOUNT;"
            }, assertOrder: false);
        }
        protected TestStore CreateTestStore(Action <ModelBuilder> onModelCreating)
        {
            TestStore = TestStoreFactory.Create(DatabaseName);

            ServiceProvider = TestStoreFactory.AddProviderServices(new ServiceCollection())
                              .AddSingleton(TestModelSource.GetFactory(onModelCreating))
                              .BuildServiceProvider(validateScopes: true);

            TestStore.Initialize(ServiceProvider, CreateContext, c => ((TransportationContext)c).Seed());

            TestSqlLoggerFactory.Clear();

            // To enable logging
            //TestSqlLoggerFactory.SetTestOutputHelper(TestOutputHelper);

            return(TestStore);
        }
        public void Keys_generated_in_batches(int count, int expected)
        {
            var loggerFactory   = new TestSqlLoggerFactory();
            var serviceProvider = new ServiceCollection()
                                  .AddEntityFrameworkSqlServer()
                                  .AddSingleton <ILoggerFactory>(loggerFactory)
                                  .BuildServiceProvider();

            using (var context = new ConfiguredChipsContext(serviceProvider, _testStore.Name))
            {
                context.Database.EnsureCreated();

                for (var i = 0; i < count; i++)
                {
                    context.Chips.Add(new KettleChips {
                        BestBuyDate = DateTime.Now, Name = "Doritos Locos Tacos " + i
                    });
                }
                context.SaveChanges();
            }

            Assert.Equal(expected, CountSqlLinesContaining("SELECT NEXT VALUE FOR", loggerFactory.Sql));
        }
 public CommandConfigurationTest()
 {
     TestSqlLoggerFactory.Clear();
 }
 protected void AssertContainsSql(params string[] expected)
 => TestSqlLoggerFactory.AssertBaseline(expected, assertOrder: false);
 protected void AssertSql(params string[] expected)
 => TestSqlLoggerFactory.AssertBaseline(expected);