SHARE
TWEET

pr04 entity exam

enevlogiev Aug 24th, 2015 116 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using _01.EntityFrameworkMappings;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Xml;
  9.  
  10. namespace _04.ImportUsersAndTheirGamesFromXML
  11. {
  12.     class ImportFromXML
  13.     {
  14.         static void Main()
  15.         {
  16.             var ctx = new DiabloEntities();
  17.             var xmlDoc = new XmlDocument();
  18.             xmlDoc.Load("../../users-and-games.xml");
  19.  
  20.             XmlNodeList users = xmlDoc.SelectNodes("/users/user");
  21.  
  22.             foreach (XmlNode userInfo in users)
  23.             {
  24.                 var newUser = GetUserInfo(userInfo);
  25.  
  26.                 try
  27.                 {
  28.                     ProcessUser(newUser, ctx, userInfo);
  29.                 }
  30.                 catch (InvalidOperationException ex)
  31.                 {
  32.                     Console.WriteLine(ex.Message);
  33.                 }
  34.             }
  35.         }
  36.  
  37.         private static void ProcessUser(User newUser, DiabloEntities ctx, XmlNode userInfo)
  38.         {
  39.             if (ctx.Users.FirstOrDefault(u => u.Username == newUser.Username) != null)
  40.             {
  41.                 var message = string.Format("User {0} already exists", newUser.Username);
  42.                 throw new InvalidOperationException(message);
  43.             }
  44.  
  45.             Console.WriteLine("Successfully added user {0}", newUser.Username);
  46.  
  47.             var userGames = userInfo.SelectNodes("games/game");
  48.             foreach (XmlNode userGame in userGames)
  49.             {
  50.                 var gameName = userGame.SelectSingleNode("game-name").InnerText;
  51.  
  52.                 if (ctx.Games.FirstOrDefault(g => g.Name == gameName) == null)
  53.                 {
  54.                     var message = string.Format("No such game: {0}", gameName);
  55.                     throw new InvalidOperationException(message);
  56.                 }
  57.  
  58.                 var gameId = ctx.Games.FirstOrDefault(g => g.Name == gameName).Id;
  59.                 var charName = userGame.SelectSingleNode("character").Attributes["name"].Value;
  60.                 var charCash = decimal.Parse(userGame.SelectSingleNode("character").Attributes["cash"].Value);
  61.                 var charLevel = int.Parse(userGame.SelectSingleNode("character").Attributes["level"].Value);
  62.                 var joinedOn = DateTime.ParseExact(
  63.                     userGame.SelectSingleNode("joined-on").InnerText,
  64.                     "dd/MM/yyyy", CultureInfo.InvariantCulture);
  65.  
  66.                 var newUserGame = new UsersGame()
  67.                 {
  68.                     GameId = gameId,
  69.                     Character = new Character()
  70.                     {
  71.                         Name = charName
  72.                     },
  73.                     Level = charLevel,
  74.                     Cash = charCash,
  75.                     JoinedOn = joinedOn
  76.                 };
  77.  
  78.                 ctx.UsersGames.Add(newUserGame);
  79.                 Console.WriteLine("User {0} successfully added to game {1}", newUser.Username, gameName);
  80.             }
  81.  
  82.             ctx.Users.Add(newUser);
  83.             ctx.SaveChanges();
  84.         }
  85.  
  86.         private static User GetUserInfo(XmlNode user)
  87.         {
  88.             string firstName = null;
  89.             if (user.Attributes["first-name"] != null)
  90.             {
  91.                 firstName = user.Attributes["first-name"].Value;
  92.             }
  93.  
  94.             string lastName = null;
  95.             if (user.Attributes["last-name"] != null)
  96.             {
  97.                 lastName = user.Attributes["last-name"].Value;
  98.             }
  99.  
  100.             var username = user.Attributes["username"].Value;
  101.  
  102.             string email = null;
  103.             if (user.Attributes["email"] != null)
  104.             {
  105.                 email = user.Attributes["email"].Value;
  106.             }
  107.  
  108.             var isDeleted = user.Attributes["is-deleted"].Value == "1";
  109.             var ipAddress = user.Attributes["ip-address"].Value;
  110.             var registrationDate = DateTime.ParseExact(
  111.                 user.Attributes["registration-date"].Value,
  112.                 "dd/MM/yyyy", CultureInfo.InvariantCulture);
  113.  
  114.             return new User()
  115.             {
  116.                 FirstName = firstName,
  117.                 LastName = lastName,
  118.                 Email = email,
  119.                 IpAddress = ipAddress,
  120.                 IsDeleted = isDeleted,
  121.                 RegistrationDate = registrationDate,
  122.                 Username = username
  123.             };
  124.         }
  125.     }
  126. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top