public async Task Add_Attach_Remove_Update_do_not_call_DetectChanges() { var provider = InMemoryTestHelpers.Instance.CreateServiceProvider( new ServiceCollection().AddScoped <IChangeDetector, ChangeDetectorProxy>()); using var context = new ButTheHedgehogContext(provider); var changeDetector = (ChangeDetectorProxy)context.GetService <IChangeDetector>(); var id = 1; changeDetector.DetectChangesCalled = false; context.Add( new Product { Id = id++, Name = "Little Hedgehogs" }); context.Add( (object)new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange( new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange( new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange( new List <Product> { new() { Id = id++, Name = "Little Hedgehogs" } });
public async Task Auto_DetectChanges_for_SaveChanges_can_be_switched_off(bool async) { var provider = InMemoryTestHelpers.Instance.CreateServiceProvider(); using (var context = new ButTheHedgehogContext(provider)) { context.ChangeTracker.AutoDetectChangesEnabled = false; Assert.False(context.ChangeTracker.AutoDetectChangesEnabled); var product = context.Add( new Product { Id = 1, Name = "Little Hedgehogs" }).Entity; if (async) { await context.SaveChangesAsync(); } else { context.SaveChanges(); } product.Name = "Cracked Cookies"; if (async) { await context.SaveChangesAsync(); } else { context.SaveChanges(); } } using (var context = new ButTheHedgehogContext(provider)) { Assert.Equal("Little Hedgehogs", context.Products.Single().Name); } }
public void Add_Attach_Remove_Update_do_not_call_DetectChanges() { var provider = TestHelpers.Instance.CreateServiceProvider(new ServiceCollection().AddScoped<IChangeDetector, ChangeDetectorProxy>()); using (var context = new ButTheHedgehogContext(provider)) { var changeDetector = (ChangeDetectorProxy)context.GetService<IChangeDetector>(); var id = 1; changeDetector.DetectChangesCalled = false; context.Add(new Product { Id = id++, Name = "Little Hedgehogs" }); context.Add((object)new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.AddRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.AddRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.Attach(new Product { Id = id++, Name = "Little Hedgehogs" }); context.Attach((object)new Product { Id = id++, Name = "Little Hedgehogs" }); context.AttachRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.AttachRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.AttachRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.AttachRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.Update(new Product { Id = id++, Name = "Little Hedgehogs" }); context.Update((object)new Product { Id = id++, Name = "Little Hedgehogs" }); context.UpdateRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.UpdateRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.UpdateRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.UpdateRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.Remove(new Product { Id = id++, Name = "Little Hedgehogs" }); context.Remove((object)new Product { Id = id++, Name = "Little Hedgehogs" }); context.RemoveRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.RemoveRange(new Product { Id = id++, Name = "Little Hedgehogs" }); context.RemoveRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.RemoveRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }); context.Add(new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.Add((object)new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.AddRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); context.AddRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); context.Attach(new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.Attach((object)new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.AttachRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); context.AttachRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); context.Update(new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.Update((object)new Product { Id = id++, Name = "Little Hedgehogs" }, behavior: GraphBehavior.SingleObject); context.UpdateRange(new List<Product> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); context.UpdateRange(new List<object> { new Product { Id = id++, Name = "Little Hedgehogs" } }, behavior: GraphBehavior.SingleObject); Assert.False(changeDetector.DetectChangesCalled); context.ChangeTracker.DetectChanges(); Assert.True(changeDetector.DetectChangesCalled); } }
public void Add_Attach_Remove_Update_do_not_call_DetectChanges() { var provider = TestHelpers.Instance.CreateServiceProvider(new ServiceCollection().AddScoped<IChangeDetector, ChangeDetectorProxy>()); using (var context = new ButTheHedgehogContext(provider)) { var changeDetector = (ChangeDetectorProxy)((IAccessor<IServiceProvider>)context).Service .GetRequiredService<IChangeDetector>(); var entity = new Product { Id = 1, Name = "Little Hedgehogs" }; changeDetector.DetectChangesCalled = false; context.Add(entity); context.Add((object)entity); context.AddRange(entity); context.AddRange(entity); context.AddRange(new List<Product> { entity }); context.AddRange(new List<object> { entity }); context.Attach(entity); context.Attach((object)entity); context.AttachRange(entity); context.AttachRange(entity); context.AttachRange(new List<Product> { entity }); context.AttachRange(new List<object> { entity }); context.Update(entity); context.Update((object)entity); context.UpdateRange(entity); context.UpdateRange(entity); context.UpdateRange(new List<Product> { entity }); context.UpdateRange(new List<object> { entity }); context.Remove(entity); context.Remove((object)entity); context.RemoveRange(entity); context.RemoveRange(entity); context.RemoveRange(new List<Product> { entity }); context.RemoveRange(new List<object> { entity }); Assert.False(changeDetector.DetectChangesCalled); context.ChangeTracker.DetectChanges(); Assert.True(changeDetector.DetectChangesCalled); } }