Ejemplo n.º 1
0
        private void WriteArticlesToDb()
        {
            switch (_importSettings.ImportAction)
            {
            case (int)CsvImportMode.InsertAll:
                InsertArticles(_articlesListFromCsv);
                break;

            case (int)CsvImportMode.InsertAndUpdate:
                var existingArticles  = UpdateArticles(_articlesListFromCsv);
                var remainingArticles = _articlesListFromCsv.Filter(a => !existingArticles.GetBaseArticleIds().Contains <int>(a.Id));
                InsertArticles(remainingArticles);
                break;

            case (int)CsvImportMode.Update:
                UpdateArticles(_articlesListFromCsv);
                break;

            case (int)CsvImportMode.UpdateIfChanged:
                var changedArticles = _articlesListFromCsv.Filter(a => a.Created == DateTime.MinValue);
                UpdateArticles(changedArticles);
                break;

            case (int)CsvImportMode.InsertNew:
                var nonExistingArticles = GetArticles(_articlesListFromCsv, false);
                InsertArticles(nonExistingArticles);
                break;

            default:
                throw new NotImplementedException($"Неизвестный режим импорта: {_importSettings.ImportAction}");
            }
        }
Ejemplo n.º 2
0
        private ExtendedArticleList GetArticles(ExtendedArticleList articlesList, bool onlyExisting)
        {
            ExtendedArticleList existingArticles;

            if (_importSettings.UniqueContentField == null)
            {
                var existingIds = GetExistingArticleIds(articlesList.GetBaseArticleIds());
                existingArticles = articlesList.Filter(a => !onlyExisting ^ existingIds.Contains(a.Id));
            }
            else
            {
                existingArticles = new ExtendedArticleList(articlesList);
                var existingIdsMap = GetExistingArticleIdsMap(_uniqueValuesList, _importSettings.UniqueContentField.Name);
                for (var i = 0; i < articlesList.Count; i++)
                {
                    var article       = articlesList[i];
                    var uniqueValue   = _uniqueValuesList[i];
                    var articleExists = existingIdsMap.ContainsKey(uniqueValue);
                    if (articleExists)
                    {
                        article.BaseArticle.Id = existingIdsMap[uniqueValue];
                    }

                    if (!onlyExisting ^ articleExists)
                    {
                        existingArticles.Add(article);
                    }
                }
            }

            return(existingArticles);
        }