public void Seed(int dbSize, List <MasterItem> items, List <MasterCustomer> customers, List <string> tags = null) { Dictionary <string, long> tagger = new Dictionary <string, long>(); Dictionary <long, Customer> customerdictionary = new Dictionary <long, Customer>(); Dictionary <long, Item> itemdictionary = new Dictionary <long, Item>(); Console.WriteLine("Adding customers"); //Then insert customers into the db foreach (MasterCustomer customer in customers) { Customer tmpCus = new Customer { ID = customer.Id, Age = customer.Age, Email = customer.Email, Gender = customer.Gender }; Customers.Add(tmpCus); SaveChanges(); customerdictionary.Add(tmpCus.ID, tmpCus); } //Dbsize should correspond to the amount of sales already exisitng in the db, which it should be seeded with. //Therefore we need to generate customers, and items. Console.WriteLine("Adding tags"); foreach (var tag in tags) { Tag newtag = new Tag { Name = tag }; Tags.Add(newtag); SaveChanges(); tagger.Add(newtag.Name, newtag.ID); } Console.WriteLine("Adding items"); //First insert items into the db foreach (MasterItem item in items) { Item dbItem = new Item { ID = item.Id, Name = item.Name, Price = item.Price }; itemdictionary.Add(item.Id, dbItem); Items.Add(dbItem); long tmp = -1; tagger.TryGetValue(item.Tag1, out tmp); ItemTags.Add(new TagItems { ItemId = item.Id, TagId = tmp }); if (item.Tag2 != null) { tagger.TryGetValue(item.Tag2, out tmp); ItemTags.Add(new TagItems { ItemId = item.Id, TagId = tmp }); } if (item.Tag3 != null) { tagger.TryGetValue(item.Tag3, out tmp); ItemTags.Add(new TagItems { ItemId = item.Id, TagId = tmp }); } } Console.WriteLine("Gen seed"); //Then generate seeded sales Random customerSelecter = new Random(123456); Random itemAmountSelector = new Random(12341); Random itemTypeSelector = new Random(634784); Random itemSelecter = new Random(6463526); Random dateSelecotr = new Random(3435468); Random satisfactionSelecotr = new Random(39843); Random StoreSelecotr = new Random(74626); DateTime startDate = new DateTime(2015, 1, 1); DateTime endDate = new DateTime(2020, 1, 1); int range = (endDate - startDate).Days; MeasurementTool tool = new MeasurementTool(0, 0, 0, ""); for (int i = 1; i <= dbSize; i++) { List <Sale> sameSale = new List <Sale>(); //Define Once long tmpcid = (long)customerSelecter.Next(1, customers.Count); Customer customer = null; customerdictionary.TryGetValue(tmpcid, out customer); //Define items to buy int itemsToBuy = itemTypeSelector.Next(1, 5); long? tmpSaleId = null; List <long> idUsed = new List <long>(); for (int j = 0; j < itemsToBuy; j++) { long tmpiid = (long)itemSelecter.Next(1, items.Count); if (!idUsed.Contains(tmpiid)) { idUsed.Add(tmpiid); itemdictionary.TryGetValue(tmpiid, out Item itemtobuy); var tmpSale = new Sale { //ID = tmpSaleId, Date = startDate.AddDays(dateSelecotr.Next(range)), ItemId = itemtobuy.ID, ItemName = itemtobuy.Name, ItemPrice = itemtobuy.Price, ItemQuantity = itemAmountSelector.Next(1, 5), CustomerId = customer.ID, CustomerAge = customer.Age, CustomerEmail = customer.Email, CustomerGender = customer.Gender, CustomerSatisfactoryNumber = satisfactionSelecotr.Next(0, 10), CouponUsed = false, PurchaseMethod = "Card", StoreLocation = StoreLocation.Locations[StoreSelecotr.Next(0, 9)] }; Sales.Add(tmpSale); Console.WriteLine(tmpSale.ID); tmpSaleId = tmpSale.ID; } else { break; } } } //Then insert seeded sales into the db SaveChanges(); }
public void Create(ref MeasurementTool tool, List <MasterItem> items = null, List <MasterCustomer> customers = null) { int workloadSize = 10_00; long maxVal = Customers.OrderByDescending(cus => cus.ID).First().ID; MasterCustomer[] cusArray = MasterCustomer.GenerateCustomers(500, "createDeNorm", maxVal).ToArray(); MasterItem[] itemArray = items.ToArray(); Random new_or_oldSelector = new Random(4573); Random customerGenSelector = new Random(867542); Random customerSelector = new Random(456542); Random satisfySelector = new Random(2678); Random storeSelector = new Random(236786); Random diffItemSelector = new Random(83457); Random quantityItemSelector = new Random(6526); Random itemSelector = new Random(572); Random dateSelector = new Random(6762); DateTime startDate = new DateTime(2020, 1, 2); DateTime endDate = new DateTime(2020, 5, 28); int range = (endDate - startDate).Days; for (int i = 0; i < workloadSize; i++) { Console.WriteLine($"{i} ud af {workloadSize}"); int new_old = new_or_oldSelector.Next(0, 2); string title = new_old == 0 ? "PostgreSQL,Sale,DeNorm,Create,New user" : "PostgreSQL,Sale,DeNorm,Create,Existing user"; Customer customer = null; //New if (new_old == 0) { MasterCustomer tmpcustomer = cusArray[customerGenSelector.Next(0, cusArray.Length)]; customer = new Customer { Age = tmpcustomer.Age, Email = tmpcustomer.Email, Gender = tmpcustomer.Gender, }; tool.Stopwatch.Start(); Customers.Add(customer); Console.WriteLine(customer.ID); SaveChanges(); tool.Stopwatch.Stop(); } //Exisiting else { int max = (int)Customers.OrderByDescending(cus => cus.ID).First().ID; long ranpos = (long)customerSelector.Next(1, max); customer = Customers.Find(ranpos); } int satisfactorynumber = satisfySelector.Next(0, 10); //Item selection and Saleitem creation List <string> usedItems = new List <string>(); int diffItems = diffItemSelector.Next(1, 5); long? tmpSaleId = null; for (int j = 0; j < diffItems; j++) { int itemIndex = itemSelector.Next(0, itemArray.Length); if (!usedItems.Contains(itemArray[itemIndex].Name)) { // Find item usedItems.Add(itemArray[itemIndex].Name); int itemQuant = quantityItemSelector.Next(1, 5); Item foundItem = Items.Where(it => it.Name.Equals(itemArray[itemIndex].Name)).First(); //Sale creation Sale sale = new Sale { ID = tmpSaleId, ItemId = foundItem.ID, ItemName = foundItem.Name, ItemPrice = foundItem.Price, ItemQuantity = itemQuant, CustomerId = customer.ID, CustomerAge = customer.Age, CustomerEmail = customer.Email, CustomerGender = customer.Gender, Date = startDate.AddDays(dateSelector.Next(range)), CouponUsed = false, PurchaseMethod = "Card", StoreLocation = StoreLocation.Locations[storeSelector.Next(0, 9)], CustomerSatisfactoryNumber = satisfactorynumber }; tool.Stopwatch.Start(); Sales.Add(sale); SaveChanges(); tool.Stopwatch.Stop(); tmpSaleId = sale.ID; } else { break; } } //Saves measurements every sale update tool.SaveAndReset(title); } }