Example #1
0
        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();
     }
 }
Example #3
0
        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);
        }