void CreateFakeQuotes(DevAVDb context, string connectionString, /*List<OrderItem> orderItems, */ List <Order> allOrders) { var newQuotes = new List <Quote>(); Random seed = new Random(13); var percentages = Enum.GetValues(typeof(StateEnum)).Cast <StateEnum>().ToDictionary(s => s, s => seed.NextDouble() / 1.4 + 0.2); // 0.2 .. 0.9 int number = 3000; int curState = 0; var stateGroups = allOrders.GroupBy(o => o.Store.State).ToList(); foreach (var stateGroup in stateGroups) { Stopwatch sw = new Stopwatch(); sw.Start(); StateEnum state = stateGroup.Key; List <Order> orders = stateGroup.ToList(); var quotes = orders.Select(o => { var quote = OrderToQuote(o, ref number /*, orderItems, items*/); return(quote); }).ToList(); while (percentages[state] < (double)orders.Count / quotes.Count) { quotes.Add(OrderToQuote(orders[seed.Next() % orders.Count], ref number /*, orderItems, items*/)); } RaiseProgress(string.Format("Creating quotes for state {0}/{1} ({2})", ++curState, stateGroups.Count, sw.Elapsed)); UpdateOpportunity(quotes, percentages[state]); newQuotes.AddRange(quotes); } context.Quotes.AddRange(newQuotes); context.SaveChanges(); context.SaveChanges(); }
void DuplicateOrders(DevAVDb context, Dictionary <int, Customer> customers, Dictionary <int, CustomerStore> customerStores, List <Order> protoOrders, string connectionString, List <Order> newOrders) { RaiseProgress("duplicating orders (years)"); Customer firstCustomer = customers[1]; PreCorrectOrders(context, protoOrders); protoOrders.ForEach(o => { o.OrderDate += TimeSpan.FromDays(730); o.ShipDate += TimeSpan.FromDays(730); }); DuplicateOrdersToDate(protoOrders.AsReadOnly(), newOrders ); protoOrders.AddRange(newOrders); int curInvoiceNumber = protoOrders.Max(o => (int)o.InvoiceNumber) + 3; int curPONumber = protoOrders.Max(o => int.Parse(o.PONumber)) + 3; RaiseProgress("duplicating orders (customers)"); int customersDone = 0; List <CustomerStore> firstCustomerStores = customerStores.Values.Where(s => s.Customer.Id == firstCustomer.Id).ToList(); foreach (Customer customer in customers.Values.Except(new[] { firstCustomer })) { List <CustomerStore> stores = customerStores.Values.Where(s => s.Customer.Id == customer.Id).ToList(); Debug.Assert(stores.Count == firstCustomerStores.Count); var storeMap = new Dictionary <CustomerStore, CustomerStore>(); for (int i = 0; i < stores.Count; ++i) { storeMap[firstCustomerStores[i]] = stores[i]; } foreach (Order order in protoOrders) { Order dupOrder = Duplicate(order); dupOrder.Customer = customer; dupOrder.Store = storeMap[order.Store]; dupOrder.InvoiceNumber = curInvoiceNumber; dupOrder.PONumber = curPONumber.ToString(); newOrders.Add(dupOrder); curInvoiceNumber += 3; curPONumber += 3; } RaiseProgress(string.Format("done {0}/{1}", ++customersDone, customers.Values.Count() - 1)); } context.Orders.AddRange(newOrders); context.SaveChanges(); context.SaveChanges(); PostCorrectOrders(context); }
void DropMigrationHistory(DevAVDb context) { using (var command = context.Database.Connection.CreateCommand()) { context.Database.Connection.Open(); command.CommandText = "drop table __MigrationHistory"; command.ExecuteNonQuery(); } }
void PostCorrectOrders(DevAVDb context) { RaiseProgress("PostCorrectOrders"); var random = new Random(); Dictionary <Customer, Tuple <int, bool> > correction = CalculateCorrectionsForOrdersAndOrderItems(context, random); foreach (var order in context.Orders) { CorrectDates(random, order); CorrectOrdersAndOrderItems(context, random, correction, order); } context.SaveChanges(); }
static void CorrectOrdersAndOrderItems(DevAVDb context, Random random, Dictionary <Customer, Tuple <int, bool> > correction, Order order) { if (order.OrderDate.Year != correction[order.Customer].Item1) { return; } bool isNegativeFactor = correction[order.Customer].Item2; int factor = random.Next(1, 4); if (isNegativeFactor) { factor *= -1; } order.SaleAmount = 1000; //orderItems.Sum(oi => oi.Total); order.TotalAmount = order.SaleAmount + order.ShippingAmount; }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //var deleteContext = new DevAVDb(); //if(deleteContext.Database.Exists()) // deleteContext.Database.Delete(); var context = new DevAVDb(); if (!context.Database.Exists()) { DXSplashScreen.Show <GenerateDBSplashScreen>(); DXSplashScreen.SetState("Generating database..."); try { Database.SetInitializer <DevAVDb>(new DatabaseInitializer()); context.Customers.Count(); } finally { DXSplashScreen.Close(); } } }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); ApplicationThemeHelper.UpdateApplicationThemeName(); DbEngineDetector.PatchConnectionStringsAndConfigureEntityFrameworkDefaultConnectionFactory(); //var deleteContext = new DevAVDb(); //if(deleteContext.Database.Exists()) // deleteContext.Database.Delete(); var context = new DevAVDb(); if (!context.Database.Exists()) { DXSplashScreen.Show <GenerateDBSplashScreen>(); DXSplashScreen.SetState("Generating database..."); try { Database.SetInitializer <DevAVDb>(new DatabaseInitializer()); context.Customers.Count(); } finally { DXSplashScreen.Close(); } } }
public void Seed(DevAVDb context) { Init(); string connectionString = context.Database.Connection.ConnectionString; var allResources = typeof(DatabaseGenerator).Assembly.GetManifestResourceNames(); malePictures = allResources.Where(r => r.Contains("MalePhotos")).Select(name => new Picture { Data = ReadEmbeddedResource(name) }).ToList(); femalePictures = allResources.Where(r => r.Contains("FemalePhotos")).Select(name => new Picture { Data = ReadEmbeddedResource(name) }).ToList(); ResetPictures(); context.SaveChanges(); context.SaveChanges(); var crests = CreateCrests(); context.SaveChanges(); var stateEnums = CreateStateEnums(); context.SaveChanges(); var employees = CreateEmployees(stateEnums); context.Employees.AddRange(employees.Values); FixEmployeeStatus(employees.Values.ToList()); context.SaveChanges(); var products = CreateProducts(employees); context.Products.AddRange(products.Values); context.SaveChanges(); var customers = CreateCustomers(stateEnums); PatchCustomers(customers.Values.ToList()); context.Customers.AddRange(customers.Values); context.SaveChanges(); var customerStores = CreateCustomerStores(stateEnums, crests, customers); context.CustomerStores.AddRange(customerStores.Values); context.SaveChanges(); currentMalePictures = malePictures.ToList(); currentFemalePictures = femalePictures.ToList(); var tasks = CreateTasks(employees /*, customerEmployees*/); context.Tasks.AddRange(tasks.Values); context.SaveChanges(); context.SaveChanges(); var orders = CreateOrders(employees, customers, customerStores); context.Orders.AddRange(orders.Values); context.SaveChanges(); context.SaveChanges(); context.SaveChanges(); context.SaveChanges(); context.SaveChanges(); context.SaveChanges(); RaiseProgress("Updating locations..."); context.SaveChanges(); var newOrders = new List <Order>(); DuplicateOrders(context, customers, customerStores, orders.Values.ToList(), connectionString, newOrders); CreateFakeQuotes(context, connectionString, newOrders); DropMigrationHistory(context); }
void PreCorrectOrders(DevAVDb context, List <Order> orders) { CorrectSpacesInOrders(orders); }
static Dictionary <Customer, Tuple <int, bool> > CalculateCorrectionsForOrdersAndOrderItems(DevAVDb context, Random random) { Dictionary <Customer, Tuple <int, bool> > correction = new Dictionary <Customer, Tuple <int, bool> >(); int minYear = context.Orders.Min(o => o.OrderDate.Year); int maxYear = context.Orders.Max(o => o.OrderDate.Year); var customers = context.Customers.ToList(); for (int i = 0; i < customers.Count; i++) { int year = random.Next(minYear, maxYear + 1); correction[customers[i]] = new Tuple <int, bool>(year, random.Next(2) == 0); } return(correction); }