/// <summary> /// Метод добавляет в базу данных каталог с указанными в catalog значениями. Порядковый номер элемента вычисляется внутри метода /// </summary> /// <param name="catalog">Объект типа Catalog</param> public void Add(Catalog catalog) { // Элементы в базу данных добавляются в конец, т.е. их порядковый номер равен // максимальному номеру из элементов, находящихся в том же каталоге + 1 List <Catalog> neighboringCatalogs = GetSubcatalogs(catalog.ParentCatalogId); List <TextBlock> neighboringTextBlocks = GetCatalogAttachments(catalog.ParentCatalogId); int maxCatalogOrder = (neighboringCatalogs.Count > 0) ? neighboringCatalogs.Max(item => item.OrderInParentCatalog) : 0; int maxTextBlockOrder = (neighboringTextBlocks.Count > 0) ? neighboringTextBlocks.Max(item => item.OrderInParentCatalog) : 0; catalog.OrderInParentCatalog = Math.Max(maxCatalogOrder, maxTextBlockOrder) + 1; _catalogDataAccess.Add(catalog); }
/// <summary> /// Данный метод сохраняет переданное дерево каталогов в базу данных /// </summary> /// <param name="catalogNode">Корневой каталог в переданном дереве каталогов. /// У данного каталога должен быть указан Id. Id подкаталогов и текстовых файлов вычисляются при добавлении</param> public void AddCatalogTree(CatalogParserNodeDto catalogNode) { List <CatalogParserNodeDto> catalogsOnCurrentDepthLevel = catalogNode.ChildrenNodes; foreach (CatalogParserNodeDto item in catalogsOnCurrentDepthLevel) { item.ParentCatalogId = catalogNode.Id; } foreach (TextBlock item in catalogNode.CatalogAttachments) { item.ParentCatalogId = catalogNode.Id; _textBlockDataAccess.Add(item); } while (catalogsOnCurrentDepthLevel.Count > 0) { List <CatalogParserNodeDto> catalogsOnNextDepthLevel = new List <CatalogParserNodeDto>(); foreach (var node in catalogsOnCurrentDepthLevel) { Catalog catalog = new Catalog { Name = node.Name, OrderInParentCatalog = node.Order, ParentCatalogId = node.ParentCatalogId }; _catalogDataAccess.Add(catalog); node.Id = catalog.Id; foreach (CatalogParserNodeDto item in node.ChildrenNodes) { item.ParentCatalogId = node.Id; catalogsOnNextDepthLevel.Add(item); } foreach (TextBlock item in node.CatalogAttachments) { item.ParentCatalogId = node.Id; _textBlockDataAccess.Add(item); } } catalogsOnCurrentDepthLevel = catalogsOnNextDepthLevel; } }