public override void Run(TestDbContext context, IList <Parent> parents, IList <Son> sons, IList <SonWithAutoParent> sonsWithAutoParent) { using (var transaction = context.Database.BeginTransaction()) { //PreserveInsertOrder stetting set to true so that it doesnt create a new parent when setting the id context.BulkInsert(parents, new BulkConfig { SetOutputIdentity = true, PreserveInsertOrder = true }); foreach (var son in sons) { son.ParentId = son.Parent.ParentId; } context.BulkInsert(sons, new BulkConfig { SetOutputIdentity = true, PreserveInsertOrder = true }); var allToys = new List <Toy>(); foreach (var son in sons) { foreach (var toy in son.Toys) { toy.SonId = son.SonId; } allToys.AddRange(son.Toys); } context.BulkInsert(allToys); transaction.Commit(); } }
public override void Run(TestDbContext context, IList <Parent> parents, IList <Son> sons, IList <SonWithAutoParent> sonsWithAutoParent) { using (var transaction = context.Database.BeginTransaction()) { //PreserveInsertOrder stetting set to true so that it doesnt create a new parent when setting the id context.BulkInsert(parents, new BulkConfig { SetOutputIdentity = true, PreserveInsertOrder = true }); context.BulkInsert(sonsWithAutoParent); transaction.Commit(); } }
public override void Run(TestDbContext context, IList <Parent> parents, IList <Son> sons, IList <SonWithAutoParent> sonsWithAutoParent) { Console.WriteLine($"{Name} Problem: Sons don't have the parent id set"); using (var transaction = context.Database.BeginTransaction()) { context.BulkInsert(parents, new BulkConfig { SetOutputIdentity = true }); context.BulkInsert(sons); transaction.Commit(); } }
public void BulkInsert_Options_KeepIdentity() { TestDbContext dbContext = new TestDbContext(); SetupData(dbContext, false); var orders = new List <Order>(); for (int i = 0; i < 20000; i++) { orders.Add(new Order { Id = i, Price = 1.57M }); } int oldTotal = dbContext.Orders.Count(); int rowsInserted = dbContext.BulkInsert(orders, new BulkInsertOptions <Order>() { KeepIdentity = true, BatchSize = 1000, }); var newOrders = dbContext.Orders.OrderBy(o => o.Id).ToList(); bool allIdentityFieldsMatch = true; for (int i = 0; i < 20000; i++) { if (newOrders[i].Id != orders[i].Id) { allIdentityFieldsMatch = false; break; } } Assert.IsTrue(oldTotal == 0, "There should not be any records in the table"); Assert.IsTrue(rowsInserted == orders.Count, "The number of rows inserted must match the count of order list"); Assert.IsTrue(allIdentityFieldsMatch, "The identities between the source and the database should match."); }
protected TestDbContext SetupDbContext(bool populateData) { TestDbContext dbContext = new TestDbContext(); dbContext.Database.EnsureCreated(); dbContext.Orders.Truncate(); if (populateData) { var orders = new List <Order>(); int id = 1; for (int i = 0; i < 2050; i++) { DateTime addedDateTime = DateTime.UtcNow.AddDays(-id); orders.Add(new Order { Id = id, ExternalId = string.Format("id-{0}", i), Price = 1.25M, AddedDateTime = addedDateTime, ModifiedDateTime = addedDateTime.AddHours(3) }); id++; } for (int i = 0; i < 1050; i++) { orders.Add(new Order { Id = id, Price = 5.35M }); id++; } for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, Price = 1.25M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } Debug.WriteLine("Last Id for Order is {0}", id); dbContext.BulkInsert(orders, new BulkInsertOptions <Order>() { KeepIdentity = true }); } return(dbContext); }
private void SetupData(TestDbContext dbcontext, bool populateData) { dbcontext.Orders.DeleteFromQuery(); if (populateData) { var orders = new List <Order>(); int id = 1; for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, ExternalId = string.Format("id-{0}", i), Price = 1.25M }); id++; } for (int i = 0; i < 1050; i++) { orders.Add(new Order { Id = id, Price = 5.35M }); id++; } for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, Price = 1.25M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } Debug.WriteLine("Last Id for Order is {0}", id); dbcontext.BulkInsert(orders, new BulkInsertOptions <Order>() { KeepIdentity = true }); } }
public void BulkInsert() { TestDbContext dbContext = new TestDbContext(); var orders = new List <Order>(); for (int i = 0; i < 20000; i++) { orders.Add(new Order { Id = i, Price = 1.57M }); } int oldTotal = dbContext.Orders.Where(o => o.Price <= 10).Count(); int rowsInserted = dbContext.BulkInsert(orders); int newTotal = dbContext.Orders.Where(o => o.Price <= 10).Count(); Assert.IsTrue(rowsInserted == orders.Count, "The number of rows inserted must match the count of order list"); Assert.IsTrue(newTotal - oldTotal == rowsInserted, "The new count minus the old count should match the number of rows inserted."); }
public void BulkInsert_Without_Identity_Column() { TestDbContext dbContext = new TestDbContext(); SetupData(dbContext, true); var articles = new List <Article>(); for (int i = 0; i < 20000; i++) { articles.Add(new Article { ArticleId = i.ToString(), Price = 1.57M }); } int oldTotal = dbContext.Articles.Where(o => o.Price <= 10).Count(); int rowsInserted = dbContext.BulkInsert(articles); int newTotal = dbContext.Articles.Where(o => o.Price <= 10).Count(); Assert.IsTrue(rowsInserted == articles.Count, "The number of rows inserted must match the count of order list"); Assert.IsTrue(newTotal - oldTotal == rowsInserted, "The new count minus the old count should match the number of rows inserted."); }
public void BulkInsert_Options_AutoMapIdentity() { TestDbContext dbContext = new TestDbContext(); SetupData(dbContext, true); var orders = new List <Order> { new Order { ExternalId = "id-1", Price = 7.10M }, new Order { ExternalId = "id-2", Price = 9.33M }, new Order { ExternalId = "id-3", Price = 3.25M }, new Order { ExternalId = "id-1000001", Price = 2.15M }, new Order { ExternalId = "id-1000002", Price = 5.75M }, }; int rowsAdded = dbContext.BulkInsert(orders, new BulkInsertOptions <Order> { UsePermanentTable = true }); bool autoMapIdentityMatched = true; foreach (var order in orders) { if (!dbContext.Orders.Any(o => o.ExternalId == order.ExternalId && o.Id == order.Id && o.Price == order.Price)) { autoMapIdentityMatched = false; break; } } Assert.IsTrue(rowsAdded == orders.Count, "The number of rows inserted must match the count of order list"); Assert.IsTrue(autoMapIdentityMatched, "The auto mapping of ids of entities that were merged failed to match up"); }
protected TestDbContext SetupDbContext(bool populateData, PopulateDataMode mode = PopulateDataMode.Normal) { TestDbContext dbContext = new TestDbContext(); dbContext.Orders.Truncate(); dbContext.Products.Truncate(); dbContext.Database.ClearTable("TphPeople"); dbContext.Database.DropTable("OrdersUnderTen", true); dbContext.Database.DropTable("OrdersLast30Days", true); if (populateData) { if (mode == PopulateDataMode.Normal) { var orders = new List <Order>(); int id = 1; for (int i = 0; i < 2050; i++) { DateTime addedDateTime = DateTime.UtcNow.AddDays(-id); orders.Add(new Order { Id = id, ExternalId = string.Format("id-{0}", i), Price = 1.25M, AddedDateTime = addedDateTime, ModifiedDateTime = addedDateTime.AddHours(3) }); id++; } for (int i = 0; i < 1050; i++) { orders.Add(new Order { Id = id, Price = 5.35M }); id++; } for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, Price = 1.25M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } Debug.WriteLine("Last Id for Order is {0}", id); dbContext.BulkInsert(orders, new BulkInsertOptions <Order>() { KeepIdentity = true }); var products = new List <Product>(); id = 1; for (int i = 0; i < 2050; i++) { products.Add(new Product { Id = i.ToString(), Price = 1.25M, OutOfStock = false }); id++; } for (int i = 2050; i < 7000; i++) { products.Add(new Product { Id = i.ToString(), Price = 1.25M, OutOfStock = true }); id++; } Debug.WriteLine("Last Id for Product is {0}", id); dbContext.BulkInsert(products, new BulkInsertOptions <Product>() { KeepIdentity = false, AutoMapOutputIdentity = false }); } else if (mode == PopulateDataMode.Tph) { //TPH Customers & Vendors var tphCustomers = new List <TphCustomer>(); var tphVendors = new List <TphVendor>(); for (int i = 0; i < 2000; i++) { tphCustomers.Add(new TphCustomer { Id = i, FirstName = string.Format("John_{0}", i), LastName = string.Format("Smith_{0}", i), Email = string.Format("john.smith{0}@domain.com", i), Phone = "404-555-1111", AddedDate = DateTime.UtcNow }); } for (int i = 2000; i < 3000; i++) { tphVendors.Add(new TphVendor { Id = i, FirstName = string.Format("Mike_{0}", i), LastName = string.Format("Smith_{0}", i), Phone = "404-555-2222", Email = string.Format("mike.smith{0}@domain.com", i), Url = string.Format("http://domain.com/mike.smith{0}", i) }); } dbContext.BulkInsert(tphCustomers, new BulkInsertOptions <TphCustomer>() { KeepIdentity = true }); dbContext.BulkInsert(tphVendors, new BulkInsertOptions <TphVendor>() { KeepIdentity = true }); } } return(dbContext); }
private TestDbContext SetupDbContext(bool populateData) { TestDbContext dbContext = new TestDbContext(); dbContext.Orders.DeleteFromQuery(); dbContext.Articles.DeleteFromQuery(); if (populateData) { var orders = new List <Order>(); int id = 1; for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, ExternalId = string.Format("id-{0}", i), Price = 1.25M }); id++; } for (int i = 0; i < 1050; i++) { orders.Add(new Order { Id = id, Price = 5.35M }); id++; } for (int i = 0; i < 2050; i++) { orders.Add(new Order { Id = id, Price = 1.25M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } for (int i = 0; i < 6000; i++) { orders.Add(new Order { Id = id, Price = 15.35M }); id++; } Debug.WriteLine("Last Id for Order is {0}", id); dbContext.BulkInsert(orders, new BulkInsertOptions <Order>() { KeepIdentity = true }); var articles = new List <Article>(); id = 1; for (int i = 0; i < 2050; i++) { articles.Add(new Article { ArticleId = string.Format("id-{0}", i), Price = 1.25M, OutOfStock = false }); id++; } for (int i = 0; i < 2050; i++) { articles.Add(new Article { ArticleId = string.Format("id-{0}", id), Price = 1.25M, OutOfStock = true }); id++; } Debug.WriteLine("Last Id for Article is {0}", id); dbContext.BulkInsert(articles, new BulkInsertOptions <Article>() { KeepIdentity = false, AutoMapOutputIdentity = false }); } return(dbContext); }