/// <summary> /// Importe une #<see cref="PageArticle"/> du fichier XML et l'enregistre dans la base de donnée. Si la PageArticle importée est déjà en base de données, /// la supprime et la restaure avec les nouvelles données. /// </summary> /// <param name="articleElement">XElement de article</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="page">Page en liaison avec la PageArticle</param> /// <param name="article">Article en liaison avec la PageArticle</param> /// <returns>Retourne la PageArticle importée</returns> private static PageArticle ParsePageArticleElement(XElement articleElement, LISAEntities entities, Page page, Article article) { int pageArticleCoordX = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("coordx")).Value); int pageArticleCoordY = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("coordy")).Value); int pageArticleWidth = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("width")).Value); int pageArticleHeight = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("height")).Value); PageArticle result = entities.PageArticles.FirstOrDefault(p => p.IdPage == page.Id && p.IdArticle == article.Id); if (result != null) { entities.PageArticles.Remove(result); } result = new PageArticle() { Article = article, Page = page, ZoneCoordonnéesX = pageArticleCoordX, ZoneCoordonnéesY = pageArticleCoordY, ZoneHauteur = pageArticleHeight, ZoneLargeur = pageArticleWidth }; entities.PageArticles.Add(result); return(result); }
private static PageArticle ParsePageArticleElement(XElement pageArticleElement, Page page, Article article, LISAEntities entities) { PageArticle result = null; int coordX = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int coordY = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int width = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int height = short.Parse(pageArticleElement.Element(XName.Get("")).Value); result = entities.PageArticles.FirstOrDefault(pa => pa.Article.ImportId == article.ImportId && result.Page.ImportId == page.ImportId); result = new PageArticle() { Article = article, Page = page, ZoneCoordonnéesX = coordX, ZoneCoordonnéesY = coordY, ZoneLargeur = width, ZoneHauteur = height }; return(entities.PageArticles.Add(result));; }
/// <summary> /// Importe les données du fichier XML et les enregistre en base de données /// </summary> /// <param name="filePath">Chemin du fichier XML</param> private static void ImportXMLFile(string filePath) { Console.WriteLine("Import du fichier : " + filePath); //Console.WriteLine($"Import du fichier : {filePath}"); try { using (LISAEntities entities = new LISAEntities()) { // Ouvre la connexion vers la base de donnée entities.Database.Connection.Open(); XDocument document = XDocument.Load(filePath); ParseTypeMedia(entities); // Boucle sur les opérations du fichier XML foreach (XElement operationElement in document.Descendants(XName.Get("operation"))) { Operation operation = ParseOperationElement(operationElement, entities); // Boucle sur les catalogue du fichier XML foreach (XElement catalogElement in operationElement.Elements(XName.Get("catalog"))) { Catalogue catalog = ParseCatalogElement(catalogElement, entities, operation); // Boucle sur les magasins du fichier XML foreach (XElement shopElement in catalogElement.Elements(XName.Get("shops")).Elements()) { Magasin shop = ParseShopElement(shopElement, entities); ParseShopCatalogElement(shopElement, entities, catalog, shop); } // Boucle sur les pages du fichier XML foreach (XElement pageElement in catalogElement.Elements(XName.Get("pages")).Elements()) { Page page = ParsePageElement(pageElement, entities, catalog); foreach (XElement articleElement in pageElement.Elements(XName.Get("products")).Elements()) { Categorie categorie = ParseCategorieElement(articleElement, entities); Article article = ParseArticleElement(articleElement, entities, pageElement, categorie); ParseMediumPictoElement(articleElement, entities, article); //ParseMediumImageElement(articleElement, entities, article); PageArticle pageArticle = ParsePageArticleElement(articleElement, entities, page, article); PrixCatalogueArticle prixCatalogueArticle = ParsePrixCatalogueArticleElement(articleElement, entities, catalog, article); } } } } entities.SaveChanges(); } } catch (Exception ex) { Console.WriteLine($"Impossible d'importer le fichier {filePath + Environment.NewLine + ex.Message}"); } #region Exo : Ajout opération, catalogue, page ////Créer la chaine de connexion //using (LISAEntities entities = new LISAEntities()) //{ // entities.Operations.ToList().ForEach(o => entities.Operations.Remove(o)); // entities.Catalogues.ToList().ForEach(c => entities.Catalogues.Remove(c)); // entities.Pages.ToList().ForEach(p => entities.Pages.Remove(p)); // //Créer une opération // Operation op = new Operation // { // Code = "Je suis le code de l'opération", // Titre = "Je suis le titre de l'opération", // DateDebut = DateTime.Now, // DateFin = DateTime.Now, // Catalogues = null // }; // entities.Operations.Add(op); // //Créer un catalogue // Catalogue cat = new Catalogue // { // Hauteur = 500, // Largeur = 500, // Libelle = "Je suis le libelle du catalogue", // Type = "Je suis le type du catalogue", // Vitesse = "V3", // Operation = op // }; // entities.Catalogues.Add(cat); // //Créer trois pages // List<Page> allPages = new List<Page>(); // for (int i = 0; i < 10; i++) // { // Page page = new Page() // { // Numero = i, // Catalogue = cat // }; // allPages.Add(page); // } // //Page page1 = new Page() // //{ // // Numero = 1, // // Catalogue = cat // //}; // //Page page2 = new Page() // //{ // // Numero = 2, // // Catalogue = cat // //}; // //Page page3 = new Page() // //{ // // Numero = 3, // // Catalogue = cat // //}; // //entities.Pages.Add(page1); // //entities.Pages.Add(page2); // //entities.Pages.Add(page3); // foreach (Page page in allPages) // { // entities.Pages.Add(page); // } #endregion }