public void BulkMerge_Options_Default() { TestDbContext dbContext = new TestDbContext(); SetupData(dbContext, true); var orders = dbContext.Orders.Where(o => o.Id <= 10000).OrderBy(o => o.Id).ToList(); int ordersToAdd = 5000; int ordersToUpdate = orders.Count; foreach (var order in orders) { order.Price = Convert.ToDecimal(order.Id + .25); } for (int i = 0; i < ordersToAdd; i++) { orders.Add(new Order { Id = 100000 + i, Price = 3.55M }); } var result = dbContext.BulkMerge(orders, new BulkMergeOptions <Order> { MergeOnCondition = (s, t) => s.Id == t.Id, BatchSize = 1000 }); var newOrders = dbContext.Orders.OrderBy(o => o.Id).ToList(); bool areAddedOrdersMerged = true; bool areUpdatedOrdersMerged = true; foreach (var newOrder in newOrders.Where(o => o.Id <= 10000).OrderBy(o => o.Id)) { if (newOrder.Price != Convert.ToDecimal(newOrder.Id + .25)) { areUpdatedOrdersMerged = false; break; } } foreach (var newOrder in newOrders.Where(o => o.Id >= 500000).OrderBy(o => o.Id)) { if (newOrder.Price != 3.55M) { areAddedOrdersMerged = false; break; } } Assert.IsTrue(result.RowsAffected == orders.Count(), "The number of rows inserted must match the count of order list"); Assert.IsTrue(result.RowsUpdated == ordersToUpdate, "The number of rows updated must match"); Assert.IsTrue(result.RowsInserted == ordersToAdd, "The number of rows added must match"); Assert.IsTrue(areAddedOrdersMerged, "The orders that were added did not merge correctly"); Assert.IsTrue(areUpdatedOrdersMerged, "The orders that were updated did not merge correctly"); }
public void BulkMerge_Options_AutoMapIdentity() { TestDbContext dbContext = new TestDbContext(); SetupData(dbContext, true); int ordersToUpdate = 3; int ordersToAdd = 2; 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 }, }; var result = dbContext.BulkMerge(orders, new BulkMergeOptions <Order> { MergeOnCondition = (s, t) => s.ExternalId == t.ExternalId, 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(result.RowsAffected == ordersToAdd + ordersToUpdate, "The number of rows inserted must match the count of order list"); Assert.IsTrue(result.RowsUpdated == ordersToUpdate, "The number of rows updated must match"); Assert.IsTrue(result.RowsInserted == ordersToAdd, "The number of rows added must match"); Assert.IsTrue(autoMapIdentityMatched, "The auto mapping of ids of entities that were merged failed to match up"); }