private static void Main() { const string CatalogPath = "../../complex-books.xml"; var bookstoreDbContext = new BookstoreData(new BookstoreDbContext()); bookstoreDbContext.Reviews.Count(); var document = XDocument.Load(CatalogPath); var books = document.Descendants("book"); foreach (var book in books) { ParseBook(bookstoreDbContext, book); bookstoreDbContext.Authors.SaveChanges(); } }
private static void ExtractAuthors(BookstoreData bookstoreDbContext, XElement authorsElement, ICollection<Author> authors) { var extractedAuthors = from auth in authorsElement.Descendants("author") where auth.Value != null select auth.Value; foreach (var authorName in extractedAuthors) { var authorToAdd = bookstoreDbContext.Authors.FirstOrDefault(auth => auth.Name == authorName) ?? bookstoreDbContext.Authors.Add(new Author { Name = authorName }); authors.Add(authorToAdd); } }
private static void ParseBook(BookstoreData bookstoreDbContext, XElement book) { var titleElement = book.Element("title"); if (titleElement == null) { throw new ArgumentNullException(); } var authorsElement = book.Element("authors"); var websiteElement = book.Element("web-site"); var isbnElement = book.Element("isbn"); var reviewsElement = book.Element("reviews"); var priceElement = book.Element("price"); decimal? price = null; if (priceElement != null) { price = decimal.Parse(priceElement.Value, CultureInfo.InvariantCulture); } var reviews = new HashSet<Review>(); if (reviewsElement != null) { ExtractReviews(bookstoreDbContext, reviewsElement); } string isbn = null; if (isbnElement != null) { isbn = isbnElement.Value; } string website = null; if (websiteElement != null) { website = websiteElement.Value; } ICollection<Author> authors = new HashSet<Author>(); if (authorsElement != null) { ExtractAuthors(bookstoreDbContext, authorsElement, authors); } bookstoreDbContext.Books.Add( new Book { Title = titleElement.Value, Authors = authors, OfficialWebsite = website, ISBN = isbn, Reviews = reviews, Price = price }); }
private static void ExtractReviews(BookstoreData bookstoreDbContext, XElement reviewsElement) { var extractedReviews = from review in reviewsElement.Descendants("review") where review.Value != null select review; foreach (var review in extractedReviews) { var authorAtrrib = review.Attribute("author"); var dateAttrib = review.Attribute("date"); var reviewDateTime = DateTime.Now; if (dateAttrib != null) { var dateToparse = dateAttrib.Value; reviewDateTime = DateTime.Parse(dateToparse); } Author author = null; if (authorAtrrib != null) { author = bookstoreDbContext.Authors.FirstOrDefault(auth => auth.Name == authorAtrrib.Value); } bookstoreDbContext.Reviews.Add(new Review { Text = review.Value, Author = author, CreateDate = reviewDateTime }); } }