Пример #1
0
        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);
                }
            });
        }
Пример #2
0
        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));
        }