protected IList <UCommerceProduct> GenerateVariants(UmbracoDbContext context, ProductWithDefinition[] products, string[] mediaIds) { uint batchSize = 100_000; uint numberOfBatches = (uint)Math.Ceiling(1.0 * Count / batchSize); Console.Write($"Generating {Count:N0} {EntityNamePlural} in {numberOfBatches} batches of {batchSize}. "); var insertedProducts = new List <UCommerceProduct>((int)Count); using (var p = new ProgressBar()) { var variantBatches = GeneratorHelper.Generate(() => GenerateVariant(mediaIds, products), Count) .DistinctBy(a => a.UniqueIndex()) .Batch(batchSize); variantBatches.EachWithIndex((variants, index) => { var listOfVariants = variants.ToList(); context.BulkInsert(listOfVariants, options => options.SetOutputIdentity = true); insertedProducts.AddRange(listOfVariants); p.Report(1.0 * index / numberOfBatches); }); return(insertedProducts); } }
public override void Seed(UmbracoDbContext context) { int[] productIds = context.UCommerceProduct .Where(product => product.UCommerceCategoryProductRelation.Count == 0) .Where(product => product.ParentProductId == null) // not variants .Select(x => x.ProductId).ToArray(); int[] categoryIds = context.UCommerceCategory.Select(x => x.CategoryId).ToArray(); uint batchSize = 100_000; uint batchCount = (uint)Math.Ceiling(1.0 * Count / batchSize); Console.Write( $"Generating {Count:N0} relations for {productIds.Length:N0} products and {categoryIds.Length:N0} categories in batches of {batchSize:N0}. "); using (var p = new ProgressBar()) { var relationBatches = GeneratorHelper .Generate(() => GenerateRelation(productIds, categoryIds), Count) .DistinctBy(a => a.UniqueIndex()) .Batch(batchSize); relationBatches.EachWithIndex((relations, index) => { context.BulkInsert(relations.ToList(), options => options.SetOutputIdentity = false); p.Report(1.0 * index / batchCount); }); } }
private List <UCommerceCategory> GenerateSubCategories(DataContext context, int[] definitionIds, string[] mediaIds, IEnumerable <UCommerceCategory> topLevelCategories) { uint batchSize = 100_000; uint numberOfBatches = (uint)Math.Ceiling(4.0 * Count / 5.0 / batchSize); Console.Write($"Generating {4 * Count / 5:N0} subcategories in batches of {batchSize}. "); var insertedCategories = new List <UCommerceCategory>((int)Count / 5); using (var p = new ProgressBar()) { var categoryBatches = GeneratorHelper .Generate(() => GenerateSubCategory(definitionIds, mediaIds, topLevelCategories), 4 * Count / 5) .DistinctBy(a => a.UniqueIndex()) .Batch(batchSize); categoryBatches.EachWithIndex((categories, index) => { var listOfCats = categories.ToList(); context.Ucommerce.BulkInsert(listOfCats, options => options.SetOutputIdentity = true); insertedCategories.AddRange(listOfCats); p.Report(1.0 * index / numberOfBatches); }); return(insertedCategories); } }
private void btnGo_Click(object sender, EventArgs e) { var sb = getMissingDependencyString(); if (sb.Length > 0) { MessageBox.Show(sb.ToString(), "Dependencies"); return; } var workspaces = getSortedWorkspaces((gridTables.DataSource as BindingList <TableWorkspace>) .Where(t => t.AddRowCount > 0 || t.Truncate || t.Delete).ToList()); var changes = workspaces.Select(t => t.Table.TableName).ToList(); if (changes.Count() > 15) { changes = changes.Take(15).ToList(); changes.Add("..."); } if (MessageBox.Show(string.Format("{0} - {1} will be populated:\r\n\r\n{2}\r\n\r\nContinue?", _generatorHelper.Database.DataSource, _generatorHelper.Database.DatabaseName, string.Join("\r\n", changes.ToArray())), "Proceed", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return; } if (!workspaces.Any()) { MessageBox.Show("Nothing to populate."); return; } bool success = false; var worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.DoWork += delegate(object sender2, DoWorkEventArgs e2) { if (workspaces.Any() && !_generatorHelper.Generate(worker, workspaces)) { return; } success = true; }; PaJaMa.WinControls.WinProgressBox.ShowProgress(worker, allowCancel: true); if (success) { MessageBox.Show("Done"); refreshPage(true); } }
public override void Seed(DataContext context) { Console.Write($"Generating {Count:N0} product relation types. "); using (var p = new ProgressBar()) { var dataTypes = GeneratorHelper.Generate(Generate, Count); p.Report(0.5); context.Ucommerce.BulkInsert(dataTypes, options => options.SetOutputIdentity = false); } }
private List <UCommerceDataType> GenerateDataTypes(DataContext context, int[] definitionIds) { Console.Write($"Generating {Count:N0} data types."); using (var p = new ProgressBar()) { var dataTypes = GeneratorHelper.Generate(() => Generate(definitionIds), Count).ToList(); p.Report(0.5); context.Ucommerce.BulkInsert(dataTypes); return(dataTypes); } }
public override void Seed(UmbracoDbContext context) { Console.Write($"Generating {Count:N0} order number series. "); using (var p = new ProgressBar()) { p.Report(0.1); var orderNumberSeries = GeneratorHelper.Generate(() => _faker.Generate(), Count); p.Report(0.5); context.BulkInsert(orderNumberSeries); } }
public override void Seed(DataContext context) { Console.Write($"Generating {Count:N0} product definitions. "); using (var p = new ProgressBar()) { var productDefinitions = GeneratorHelper.Generate(Generate, Count); p.Report(0.33); productDefinitions.ConsecutiveSortOrder((def, val) => { def.SortOrder = (int)val; }); p.Report(0.66); context.Ucommerce.BulkInsert(productDefinitions, options => options.SetOutputIdentity = false); } }
private List <UCommerceDefinitionField> GenerateFields(DataContext context, int[] definitionIds, int[] dataTypeIds) { Console.Write($"Generating {Count:N0} definition fields. "); using (var p = new ProgressBar()) { var fields = GeneratorHelper.Generate(() => GenerateField(definitionIds, dataTypeIds), Count).ToList(); fields.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; }); p.Report(0.5); context.Ucommerce.BulkInsert(fields); return(fields); } }
public override void Seed(DataContext context) { Console.Write($"Generating {Count:N0} definitions. "); using (var p = new ProgressBar()) { var catalogDefinitions = Enum.GetValues(typeof(DefinitionType)) .Cast <DefinitionType>() .SelectMany(definitionType => GeneratorHelper.Generate(() => Generate(definitionType), Count)); p.Report(0.33); catalogDefinitions.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; }); p.Report(0.66); context.Ucommerce.BulkInsert(catalogDefinitions.ToList(), options => options.SetOutputIdentity = false); } }
public override void Seed(UmbracoDbContext context) { Console.Write($"Generating {Count} currencies. "); using (var p = new ProgressBar()) { var defaultCurrenciesNotInDb = GetDefaultCurrenciesNotInDb(context); var currenciesLeft = Math.Max(0, Count - defaultCurrenciesNotInDb.Count); var currencies = currenciesLeft == 0 ? defaultCurrenciesNotInDb.Take((int)Count) : defaultCurrenciesNotInDb.Concat(GeneratorHelper.Generate(GenerateCurrency, (uint)currenciesLeft)) .DistinctBy(x => x.Isocode); p.Report(0.5); context.BulkInsert(currencies.ToList(), options => options.SetOutputIdentity = false); } }
private List <UCommerceProductCatalog> GenerateCatalogs(UmbracoDbContext context, int[] definitionIds, int[] priceGroupIds) { Console.Write($"Generating {Count:N0} catalogs. "); using (var p = new ProgressBar()) { var storeIds = context.UCommerceProductCatalogGroup.Select(c => c.ProductCatalogGroupId).ToArray(); var catalogs = GeneratorHelper.Generate(() => GenerateCatalog(definitionIds, storeIds, priceGroupIds), Count) .DistinctBy(a => a.UniqueIndex()) .ToList(); p.Report(0.5); context.BulkInsert(catalogs, options => options.SetOutputIdentity = true); return(catalogs); } }
public override void Seed(UmbracoDbContext context) { Console.Write($"Generating {Count} languages. "); using (var p = new ProgressBar()) { var availableCultures = CultureInfo.GetCultures(CultureTypes.AllCultures) .Where(cultureInfo => !context.UmbracoLanguage .Any(language => language.LanguageIsocode == cultureInfo.Name)) .ToArray(); _pickedCultures = _faker.PickRandom(availableCultures, (int)Count).ToArray(); var umbracoLanguages = GeneratorHelper.Generate(Generate, Count).Where(x => x != null).ToList(); p.Report(0.5); context.BulkInsert(umbracoLanguages, options => options.SetOutputIdentity = false); } }
public override void Seed(UmbracoDbContext context) { Console.Write($"Generating {Count:N0} price groups. "); using (var p = new ProgressBar()) { var currencyIds = context.UCommerceCurrency.Select(x => new Tuple <int, string>(x.CurrencyId, x.Isocode)) .ToArray(); p.Report(0.1); var priceGroups = GeneratorHelper.Generate(() => Generate(currencyIds), Count) .DistinctBy(x => x.UniqueIndex()) .ToArray(); p.Report(0.5); context.BulkInsert(priceGroups, options => options.SetOutputIdentity = false); } }
private List <UCommerceProductCatalogGroup> GenerateStores(DataContext context, int[] definitionIds) { Console.Write($"Generating {Count:N0} stores. "); using (var p = new ProgressBar()) { var emailProfileIds = context.Ucommerce.UCommerceEmailProfile.Select(x => x.EmailProfileId).ToArray(); var currencyIds = context.Ucommerce.UCommerceCurrency.Select(c => c.CurrencyId).ToArray(); var orderNumberSeriesIds = context.Ucommerce.UCommerceOrderNumberSerie.Select(c => c.OrderNumberId).ToArray(); p.Report(0.1); var stores = GeneratorHelper .Generate( () => GenerateStore(currencyIds, definitionIds, emailProfileIds, orderNumberSeriesIds), Count).ToList(); p.Report(0.5); context.Ucommerce.BulkInsert(stores, options => options.SetOutputIdentity = true); return(stores); } }
private List <UCommerceProductDefinitionField> GenerateDefinitionFields(DataContext context) { Console.Write($"Generating {Count:N0} product definition fields. "); using (var p = new ProgressBar()) { var dataTypeIds = context.Ucommerce.UCommerceDataType.Select(x => x.DataTypeId).ToArray(); var allProductDefinitionIds = context.Ucommerce.UCommerceProductDefinition.Select(x => x.ProductDefinitionId).ToList(); var oneHalfProductDefinitionIds = allProductDefinitionIds.Take(allProductDefinitionIds.Count / 2).ToList(); var oneHalfProductFamiliyDefinitionIds = allProductDefinitionIds.Skip(allProductDefinitionIds.Count / 2).ToList(); var familyDefinitionFields = GeneratorHelper.Generate( () => GenerateDefinitionFieldForFamily(oneHalfProductFamiliyDefinitionIds, dataTypeIds), Count / 2).ToList(); var definitionFields = GeneratorHelper.Generate( () => GenerateDefinitionFieldForNonFamily(oneHalfProductDefinitionIds, dataTypeIds), Count / 2).ToList(); var allFields = familyDefinitionFields.Concat(definitionFields).ToList(); p.Report(0.25); allFields.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; }); p.Report(0.50); allFields = allFields .Where(f => f.Name != "name") .DistinctBy(f => new CompositeKey { Key1 = f.Name.GetHashCode(), Key2 = f.ProductDefinitionId }) .ToList(); p.Report(0.75); context.Ucommerce.BulkInsert(allFields, options => options.SetOutputIdentity = true); return(allFields); } }
protected override void OnCalculateClicked() { NumberOfSteps = 0; RealItems = GeneratorHelper.Generate(MinValue, MaxValue, SolutionAccuracy, PopulationNumber); }
public override void Seed(DataContext context) { Console.Write( $"Generating {_sizeOptions.CmsMediaFolders} media folders with {_sizeOptions.CmsImagesPerFolder} images in each. "); using (var p = new ProgressBar()) { // Folders var folderNodes = GeneratorHelper.Generate(GenerateFolder, _sizeOptions.CmsMediaFolders).ToList(); folderNodes.ConsecutiveSortOrder((f, v) => f.SortOrder = (int)v); context.Cms.BulkInsert(folderNodes, options => options.SetOutputIdentity = true); foreach (var folderNode in folderNodes) { folderNode.Path = $"{folderNode.Path},{folderNode.Id}"; } context.Cms.BulkUpdate(folderNodes); p.Report(0.1); // Folder contents var folderContents = folderNodes.Select(folder => new UmbracoContent { NodeId = folder.Id, ContentTypeId = mediaFolderType }).ToArray(); context.Cms.BulkInsert(folderContents, options => options.SetOutputIdentity = true); p.Report(0.2); // Folder ContentNUs var folderContentNus = folderContents.Select(folder => new CmsContentNu { NodeId = folder.NodeId, Published = false, Data = "{\"properties\":{},\"cultureData\":{},\"urlSegment\":\"" + _faker.Lorem.Slug() + "\"}" }).ToArray(); context.Cms.BulkInsert(folderContentNus); p.Report(0.3); // Images var imageNodes = folderNodes.SelectMany(folder => { return(GeneratorHelper.Generate(() => GenerateImage(folder), _sizeOptions.CmsImagesPerFolder)); } ).ToList(); imageNodes.ConsecutiveSortOrder((f, v) => f.SortOrder = (int)v); context.Cms.BulkInsert(imageNodes, options => options.SetOutputIdentity = true); foreach (var imageNode in imageNodes) { imageNode.Path = $"{imageNode.Path},{imageNode.Id}"; } context.Cms.BulkUpdate(imageNodes); p.Report(0.4); // Image Content var imageContents = imageNodes .Select(image => new UmbracoContent { NodeId = image.Id, ContentTypeId = mediaType }).ToList(); context.Cms.BulkInsert(imageContents, options => options.SetOutputIdentity = true); p.Report(0.5); // Sample images var sampleImageNames = File.ReadAllLines("sample_image_list.txt"); string contentNuTemplate = File.ReadAllText("cmsContentNu.template"); string propertyDataTemplate = File.ReadAllText("propertyData.template"); Dictionary <int, string> imagePaths = imageNodes.ToDictionary(node => node.Id, node => $"/media/samples/{_faker.PickRandom(sampleImageNames)}"); p.Report(0.6); // Image ContentNUs var imageContentNus = imageContents.Select(imageContent => GenerateImageNu(imageContent, imagePaths[imageContent.NodeId], contentNuTemplate)).ToList(); context.Cms.BulkInsert(imageContentNus, options => options.SetOutputIdentity = true); p.Report(0.7); // Folder: Content versions and media versions var folderContentVersions = folderNodes .Select(media => new UmbracoContentVersion { Current = true, NodeId = media.Id, Text = media.Text, UserId = -1, VersionDate = DateTime.Now }) .ToList(); context.Cms.BulkInsert(folderContentVersions, options => options.SetOutputIdentity = true); var folderMediaVersions = folderContentVersions .Select(contentVersion => new UmbracoMediaVersion { Id = contentVersion.Id, Path = "" }).ToList(); context.Cms.BulkInsert(folderMediaVersions, options => options.SetOutputIdentity = true); p.Report(0.8); // Image: Content versions and media versions var imageContentVersions = imageNodes .Select(media => new UmbracoContentVersion { Current = true, NodeId = media.Id, Text = media.Text, UserId = -1, VersionDate = DateTime.Now }).ToList(); context.Cms.BulkInsert(imageContentVersions, options => options.SetOutputIdentity = true); var propertyData = imageContentVersions.SelectMany(contentVersion => { return(new[] { new UmbracoPropertyData { VersionId = contentVersion.Id, PropertyTypeId = 10, VarcharValue = "jpg" }, new UmbracoPropertyData { VersionId = contentVersion.Id, PropertyTypeId = 9, VarcharValue = "10000" }, new UmbracoPropertyData { VersionId = contentVersion.Id, PropertyTypeId = 8, IntValue = 1080 }, new UmbracoPropertyData { VersionId = contentVersion.Id, PropertyTypeId = 7, IntValue = 1080 }, new UmbracoPropertyData { VersionId = contentVersion.Id, PropertyTypeId = 6, TextValue = propertyDataTemplate.Replace("<mediaPath>", imagePaths[contentVersion.NodeId]) }, }); }); context.Cms.BulkInsert(propertyData.ToList(), options => options.SetOutputIdentity = false); p.Report(0.9); var imageMediaVersions = imageContentVersions .Select(contentVersion => new UmbracoMediaVersion { Id = contentVersion.Id, Path = imagePaths[contentVersion.NodeId] }).ToList(); context.Cms.BulkInsert(imageMediaVersions); } }