public async Task SeedAsync(ArticleContext context, IHostingEnvironment env, IOptions <ArticleSettings> settings, ILogger <ArticleContextSeed> logger) { var policy = CreatePolicy(logger, nameof(ArticleContextSeed)); await policy.ExecuteAsync(async() => { var useCustomizationData = settings.Value.UseCustomizationData; var contentRootPath = env.ContentRootPath; var picturePath = env.WebRootPath; if (!context.ArticleItems.Any()) { await context.ArticleItems.AddRangeAsync(useCustomizationData ? GetCatalogItemsFromFile(contentRootPath, context, logger) : GetPreconfiguredItems()); await context.SaveChangesAsync(); GetCatalogItemPictures(contentRootPath, picturePath); } }); }
private IEnumerable <ArticleItem> GetCatalogItemsFromFile(string contentRootPath, ArticleContext context, ILogger <ArticleContextSeed> logger) { string csvFileCatalogItems = Path.Combine(contentRootPath, "Setup", "ArticleItems.csv"); if (!File.Exists(csvFileCatalogItems)) { return(GetPreconfiguredItems()); } string[] csvheaders; try { string[] requiredHeaders = { "Id", "Pid", "Title", "Content", "ImagePath", "Checked" }; string[] optionalheaders = { "availablestock" }; csvheaders = GetHeaders(csvFileCatalogItems, requiredHeaders, optionalheaders); } catch (Exception ex) { logger.LogError(ex, "EXCEPTION ERROR: {Message}", ex.Message); return(GetPreconfiguredItems()); } return(File.ReadAllLines(csvFileCatalogItems) .Skip(1) // skip header row .Select(row => Regex.Split(row, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")) .SelectTry(column => CreateCatalogItem(column, csvheaders)) .OnCaughtException(ex => { logger.LogError(ex, "EXCEPTION ERROR: {Message}", ex.Message); return null; }) .Where(x => x != null)); }