private XDocument ModelToXml(HotelsModels.Hotel hotel) { var doc = new XDocument(new XDocumentType("Hotel", null, "hotel.dtd", null)); XElement root = new XElement("Hotel"); root.SetAttributeValue("id", hotel.id); root.SetAttributeValue("name", hotel.name); root.SetAttributeValue("category", hotel.category); root.Add(new XElement("website", hotel.website)); root.Add(new XElement("description", hotel.description)); root.Add(new XElement("facilities", hotel.facilities)); root.Add(new XElement("employees")); XElement elem = root.Element("employees"); XElement employee = null; foreach (var item in hotel.Employees) { employee = new XElement("employee"); employee.SetAttributeValue("employee_id", item.employee_id); employee.SetAttributeValue("gender", item.gender); employee.Add(new XElement("first_name", item.first_name)); employee.Add(new XElement("last_name", item.last_name)); employee.Add(new XElement("position", item.position)); employee.Add(new XElement("salary", item.salary)); employee.Element("salary") .SetAttributeValue("salary_currency", item.salary_currency); if (item.birth_date != null) { employee.Add(new XElement("birth_date", item.birth_date)); } elem.Add(employee); } root.Add(new XElement("premises")); elem = root.Element("premises"); XElement premise = null; foreach (var item in hotel.Premises) { premise = new XElement("premise"); premise.SetAttributeValue("premise_id", item.premise_id); premise.Add(new XElement("type", item.type)); premise.Add(new XElement("price", item.price)); premise.Element("price") .SetAttributeValue("currency", item.currency); premise.Add(new XElement("furniture", item.furniture)); elem.Add(premise); } root.Add(new XElement("offers")); elem = root.Element("offers"); XElement offer = null; foreach (var item in hotel.Offers) { offer = new XElement("offer"); offer.SetAttributeValue("offer_id", item.offer_id); offer.Add(new XElement("type_offer", item.type_offer)); if (item.descr_offer != null) { offer.Add(new XElement("descr_offer", item.descr_offer)); } offer.Add(new XElement("regular_price", item.regular_price)); offer.Element("regular_price") .SetAttributeValue("currency_regular", item.currency_regular); offer.Add(new XElement("promotional_price", item.promotional_price)); offer.Element("promotional_price") .SetAttributeValue("currency_promotional", item.currency_promotional); elem.Add(offer); } root.Add(new XElement("reviews")); elem = root.Element("reviews"); XElement review = null; foreach (var item in hotel.Reviews) { review = new XElement("review"); review.SetAttributeValue("review_id", item.review_id); review.Add(new XElement("reviewer", item.reviewer)); review.SetAttributeValue("rating", item.rating); if (item.comment != null) { review.Add(new XElement("comment", item.comment)); } elem.Add(review); } doc.Add(root); return(doc); }
// The id parameter name should match the DataKeyNames value set on the control /* public void PremisesListView_DeleteItem(string Id) * { * premises.Remove(premises.Single(b => b.premise_id == Id)); * } * * public void EmployeesListView_DeleteItem(string Id) * { * employees.Remove(employees.Single(b => b.employee_id == Id)); * } * * public void ReviewsListView_DeleteItem(string Id) * { * reviews.Remove(reviews.Single(b => b.review_id == Id)); * } * * public void OffersListView_DeleteItem(string Id) * { * offers.Remove(offers.Single(b => b.offer_id == Id)); * } */ protected void SubmitButton_Click(object sender, EventArgs e) { // До срещане на грешка се предполага, че всичко е наред. DbStatusLabel.Text = "Успешно записване в БД."; DbStatusLabel.ForeColor = Color.Green; XmlStatusLabel.Text = "Успешно записване в XML файл."; XmlStatusLabel.ForeColor = Color.Green; HotelsModels.Hotel hotel = null; try { hotel = ControlsToModel(); context.Hotels.Add(hotel); context.SaveChanges(); } catch (Exception ex) { DbStatusLabel.Text = "Грешка при записване в БД: " + ex.Message; DbStatusLabel.ForeColor = Color.Red; hotel = null; } try { if (hotel == null) { throw new Exception("Не се записва XML файл при грешка в записването в БД"); } XDocument hotelXml = ModelToXml(hotel); hotelXml.Save(Server.MapPath("~/App_Data/" + hotel.name + hotel.id + ".xml")); } catch (Exception ex) { XmlStatusLabel.Text = "Грешка при записване в XML файл: " + ex.Message; XmlStatusLabel.ForeColor = Color.Red; hotel = null; } if (hotel != null) { // При успешно записване се изчистват всички данни в контролите foreach (Control control in Master.FindControl("ContentPlaceHolder1").Controls) { if (control is TextBox) { (control as TextBox).Text = ""; } } // Изчистване на запазените списъци в ViewState и обновяване на ListView premises = new List <HotelsModels.Premise>(); ViewState["premises"] = premises; PremisesListView.DataBind(); offers = new List <HotelsModels.Offer>(); ViewState["offers"] = offers; OffersListView.DataBind(); employees = new List <HotelsModels.Employee>(); ViewState["employees"] = employees; EmployeesListView.DataBind(); reviews = new List <HotelsModels.Review>(); ViewState["reviews"] = reviews; ReviewsListView.DataBind(); } }
private HotelsModels.Hotel ControlsToModel() { var hotel = new HotelsModels.Hotel(); hotel.id = InpHotelID.Text; hotel.name = InpHotelName.Text; hotel.category = InpCategory.Text; hotel.website = InpWebsite.Text; hotel.description = InpDescription.Text; // bookstore.Notes = String.IsNullOrWhiteSpace(InpNote.Text) ? null : InpNote.Text; hotel.facilities = InpFacilities.Text; foreach (var enteredPremise in premises) { var premise = new HotelsModels.Premise() { premise_id = enteredPremise.premise_id, type = enteredPremise.type, price = enteredPremise.price, currency = enteredPremise.currency, furniture = enteredPremise.furniture }; hotel.Premises.Add(premise); } foreach (var enteredOffer in offers) { // bookID от запазените books не трябва да се използва, затова полетата се копират едно по едно var offer = new HotelsModels.Offer() { offer_id = enteredOffer.offer_id, type_offer = enteredOffer.type_offer, descr_offer = enteredOffer.descr_offer, regular_price = enteredOffer.regular_price, currency_regular = enteredOffer.currency_regular, promotional_price = enteredOffer.promotional_price, currency_promotional = enteredOffer.currency_promotional }; hotel.Offers.Add(offer); } foreach (var enteredEmployee in employees) { // bookID от запазените books не трябва да се използва, затова полетата се копират едно по едно var employee = new HotelsModels.Employee() { employee_id = enteredEmployee.employee_id, first_name = enteredEmployee.first_name, last_name = enteredEmployee.last_name, position = enteredEmployee.position, salary = enteredEmployee.salary, salary_currency = enteredEmployee.salary_currency, gender = enteredEmployee.gender, birth_date = enteredEmployee.birth_date }; hotel.Employees.Add(employee); } foreach (var enteredReviews in reviews) { // bookID от запазените books не трябва да се използва, затова полетата се копират едно по едно var review = new HotelsModels.Review() { review_id = enteredReviews.review_id, reviewer = enteredReviews.reviewer, rating = enteredReviews.rating, comment = enteredReviews.comment }; hotel.Reviews.Add(review); } return(hotel); }
private void XmlToDb(XmlNode xmlDocument) { using (var isolatedContext = new HotelsModels.HotelDbContext()) { var hotelXml = xmlDocument.SelectSingleNode("Hotel"); var hotel = new HotelsModels.Hotel(); hotel.id = hotelXml.Attributes["id"].InnerText; hotel.name = hotelXml.Attributes["name"].InnerText; hotel.category = hotelXml.Attributes["category"].InnerText; /* * if (isolatedContext.Hotels.Count(bs => bs.id == hotel.id) != 0) * { * throw new Exception("тoзи хотел (ID " + hotel.id + ") вече е в БД"); * } */ hotel.website = hotelXml.SelectSingleNode("website").InnerText; hotel.description = hotelXml.SelectSingleNode("description").InnerText; hotel.facilities = hotelXml.SelectSingleNode("facilities").InnerText; foreach (XmlNode premiseXml in hotelXml.SelectNodes("premises/premise")) { var premise = new HotelsModels.Premise(); premise.premise_id = premiseXml.Attributes["premise_id"].InnerText; premise.type = premiseXml.SelectSingleNode("type").InnerText; var priceXml = premiseXml.SelectSingleNode("price"); premise.price = Decimal.Parse(priceXml.InnerText, CultureInfo.InvariantCulture); premise.currency = priceXml.Attributes["currency"].InnerText; premise.furniture = premiseXml.SelectSingleNode("furniture").InnerText; hotel.Premises.Add(premise); } foreach (XmlNode offerXml in hotelXml.SelectNodes("offers/offer")) { var offer = new HotelsModels.Offer(); offer.offer_id = offerXml.Attributes["offer_id"].InnerText; offer.type_offer = offerXml.SelectSingleNode("type_offer").InnerText; if (offerXml.SelectSingleNode("descr_offer") != null) { offer.descr_offer = offerXml.SelectSingleNode("descr_offer").InnerText; } var regPriceXml = offerXml.SelectSingleNode("regular_price"); offer.regular_price = Decimal.Parse(regPriceXml.InnerText, CultureInfo.InvariantCulture); offer.currency_regular = regPriceXml.Attributes["currency_regular"].InnerText; var promoPriceXml = offerXml.SelectSingleNode("promotional_price"); offer.promotional_price = Decimal.Parse(promoPriceXml.InnerText, CultureInfo.InvariantCulture); offer.currency_promotional = promoPriceXml.Attributes["currency_promotional"].InnerText; hotel.Offers.Add(offer); } foreach (XmlNode employeeXml in hotelXml.SelectNodes("employees/employee")) { var employee = new HotelsModels.Employee(); employee.employee_id = employeeXml.Attributes["employee_id"].InnerText; employee.first_name = employeeXml.SelectSingleNode("first_name").InnerText; employee.last_name = employeeXml.SelectSingleNode("last_name").InnerText; employee.position = employeeXml.SelectSingleNode("position").InnerText; var salaryXml = employeeXml.SelectSingleNode("salary"); employee.salary = Decimal.Parse(salaryXml.InnerText, CultureInfo.InvariantCulture); employee.salary_currency = salaryXml.Attributes["salary_currency"].InnerText; employee.gender = employeeXml.Attributes["gender"].InnerText; if (employeeXml.SelectSingleNode("birth_date") != null) { employee.birth_date = employeeXml.SelectSingleNode("birth_date").InnerText; } hotel.Employees.Add(employee); } foreach (XmlNode reviewXml in hotelXml.SelectNodes("reviews/review")) { var review = new HotelsModels.Review(); review.review_id = reviewXml.Attributes["review_id"].InnerText; review.reviewer = reviewXml.SelectSingleNode("reviewer").InnerText; review.rating = reviewXml.Attributes["rating"].InnerText; if (reviewXml.SelectSingleNode("comment") != null) { review.comment = reviewXml.SelectSingleNode("comment").InnerText; } hotel.Reviews.Add(review); } isolatedContext.Hotels.Add(hotel); // Записване на всички промени isolatedContext.SaveChanges(); } }