コード例 #1
0
        public IHttpActionResult PutUsers(int id, Users users)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != users.Id)
            {
                return(BadRequest());
            }

            db.Entry(users).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UsersExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
コード例 #2
0
        static void Main()
        {
            var db = new DiabloEntities();

            var xmlDoc = XDocument.Load("../../users-and-games.xml");
            var xUsers = xmlDoc.XPathSelectElements("users/user");

            foreach (var user in xUsers)
            {
                var dbUser = new User();
                var userName = user.Attribute("username").Value;
                if (db.Users.Any(u => u.Username == userName))
                {
                    Console.WriteLine("User {0} already exists", userName);
                    dbUser = db.Users.FirstOrDefault(u => u.Username == userName);
                    continue;
                }
                else
                {
                    dbUser.Username = userName;
                    dbUser.IsDeleted = Convert.ToBoolean(int.Parse(user.Attribute("is-deleted").Value) == 0 ? "false" : "true");
                    dbUser.IpAddress = user.Attribute("ip-address").Value;
                    dbUser.RegistrationDate = DateTime.Parse(user.Attribute("registration-date").Value);
                    var firstName = user.Attribute("first-name");
                    if (firstName != null) dbUser.FirstName = firstName.Value;

                    var lastName = user.Attribute("last-name");
                    if (lastName != null) dbUser.FirstName = lastName.Value;

                    var email = user.Attribute("email");
                    if (email != null) dbUser.FirstName = email.Value;

                    db.Users.Add(dbUser);
                    db.SaveChanges();
                    Console.WriteLine("Successfully added user {0}", userName);
                }

                var games = user.XPathSelectElements("games/game");
                foreach (var gameXml in games)
                {
                    var game = new UsersGame();
                    var gameName = gameXml.Element("game-name").Value;
                    var characterName = gameXml.Element("character").Attribute("name").Value;
                    var currGame = db.Games.FirstOrDefault(g => g.Name == gameName);
                    var currCharacter = db.Characters.FirstOrDefault(g => g.Name == characterName);

                    game.GameId = currGame.Id;
                    game.UserId = dbUser.Id;
                    game.CharacterId = currCharacter.Id;
                    game.Cash = decimal.Parse(gameXml.Element("character").Attribute("cash").Value);
                    game.Level = int.Parse(gameXml.Element("character").Attribute("level").Value);
                    game.JoinedOn = DateTime.Parse(gameXml.Element("joined-on").Value);
                    db.SaveChanges();
                    Console.WriteLine("User {0} successfully added to game {1}", userName, gameXml.Element("game-name").Value);
                }
            }
        }
コード例 #3
0
 private static void ProcessGames(IEnumerable<XElement> games, User user, DiabloEntities context)
 {
     foreach (var gm in games)
     {
         var gameName = gm.Element("game-name").Value;
         var characterName = gm.Element("character").Attribute("name").Value;
         var characterCash = gm.Element("character").Attribute("cash").Value;
         var characterLevel = gm.Element("character").Attribute("level").Value;
         var joinedOn = gm.Element("joined-on").Value;
         var game = context.Games.FirstOrDefault(g => g.Name == gameName);
         var character = context.Characters.FirstOrDefault(c => c.Name == characterName);
         if (game != null && character != null)
         {
             var userGame = new UsersGame()
             {
                 Game = game,
                 User = user,
                 Character = character,
                 Level = int.Parse(characterLevel),
                 JoinedOn = DateTime.Parse(joinedOn),
                 Cash = decimal.Parse(characterCash)
             };
             if (
                 !context.UsersGames.Any(
                     ug =>
                         ug.Game.Name == game.Name && ug.User.Username == user.Username &&
                         ug.Character.Name == character.Name))
             {
                 context.UsersGames.Add(userGame);
                 context.SaveChanges();
                 Console.WriteLine("User {0} successfully added to game {1}", userGame.User.Username, userGame.Game.Name);
             }
         }
     }
 }
コード例 #4
0
        private static void ImportUsersAndGames(XElement userNode, DiabloEntities context)
        {
            var username = userNode.Attribute("username").Value;

            if (GetUserByUsername(username, context) != null)
            {
                throw new InvalidOperationException(string.Format(
                                                        "User {0} already exists",
                                                        username));
            }

            bool isDeleted = int.Parse(userNode.Attribute("is-deleted").Value) == 0;

            var regDate = ParseDate(userNode.Attribute("registration-date").Value);

            var ipAddress = userNode.Attribute("ip-address").Value;

            var user = new User()
            {
                Username         = username,
                IsDeleted        = isDeleted,
                RegistrationDate = regDate,
                IpAddress        = ipAddress
            };

            var firstName = userNode.Attribute("first-name");

            if (firstName != null)
            {
                user.FirstName = firstName.Value;
            }

            var lastName = userNode.Attribute("last-name");

            if (lastName != null)
            {
                user.LastName = lastName.Value;
            }

            var email = userNode.Attribute("email");

            if (email != null)
            {
                user.Email = email.Value;
            }

            context.Users.Add(user);
            Console.WriteLine("Successfully added user {0}", username);

            var games = userNode.XPathSelectElements("games/game");

            foreach (var gameNode in games)
            {
                ImportGame(context, gameNode, user, username);
            }

            context.SaveChanges();
        }
コード例 #5
0
        static void Main()
        {
            var context = new DiabloEntities();

            var xml = new XmlDocument();

            xml.Load("../../users-and-games.xml");
            var rootNode = xml.DocumentElement;

            foreach (XmlNode user in rootNode.ChildNodes)
            {
                var      username         = user.Attributes["username"].Value;
                var      ipAddress        = user.Attributes["ip-address"].Value;
                DateTime registrationDate = DateTime.Parse(user.Attributes["registration-date"].Value);
                bool     isDeleted        = false;
                string   lastName         = null;
                string   firstName        = null;
                string   email            = null;

                if (user.Attributes["first-name"] != null)
                {
                    firstName = user.Attributes["first-name"].Value;
                }
                if (user.Attributes["last-name"] != null)
                {
                    lastName = user.Attributes["last-name"].Value;
                }
                if (user.Attributes["email"] != null)
                {
                    email = user.Attributes["email"].Value;
                }
                if (int.Parse(user.Attributes["is-deleted"].Value) == 1)
                {
                    isDeleted = true;
                }

                if (context.Users.Any(u => u.Username == username))
                {
                    Console.WriteLine("User {0} already exists", username);
                    continue;
                }

                var userGames = rootNode.SelectSingleNode("user/games");


                // Loop through all games for the given user
                foreach (XmlNode game in userGames)
                {
                    var gameName  = game["game-name"].InnerText;
                    var character = game["character"];

                    var characterName  = character.Attributes["name"].Value;
                    var characterCash  = decimal.Parse(character.Attributes["cash"].Value);
                    var characterLevel = int.Parse(character.Attributes["level"].Value);
                    var joinedOn       = DateTime.Parse(game["joined-on"].InnerText);
                    Console.WriteLine(joinedOn);

                    if (game["joined-on"] != null && user.Attributes["registration-date"] != null)
                    {
                        var userGame = new UsersGame()
                        {
                            Cash      = characterCash,
                            Character = context.Characters.FirstOrDefault(c => c.Name == characterName),
                            Game      = context.Games.FirstOrDefault(g => g.Name == gameName),
                            JoinedOn  = joinedOn,
                            Level     = characterLevel,
                            User      = new User()
                            {
                                FirstName        = firstName,
                                LastName         = lastName,
                                Email            = email,
                                Username         = username,
                                IpAddress        = ipAddress,
                                RegistrationDate = registrationDate,
                                IsDeleted        = isDeleted
                            }
                        };

                        context.UsersGames.Add(userGame);

                        Console.WriteLine("Successfully added user {0}", username);
                        Console.WriteLine("User {0} successfully added to game {1}", username, gameName);
                    }
                }

                context.SaveChanges();
            }
        }
コード例 #6
0
        static void Main()
        {
            string fileName = "../../users-and-games.xml";

            var         context     = new DiabloEntities();
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.Load(fileName);

            XmlNode rootNode = xmlDocument.DocumentElement;

            foreach (XmlNode user in rootNode.ChildNodes)
            {
                try
                {
                    if (user.Attributes.Count > 0)
                    {
                        string   firstName = null, lastName = null, email = null, username = null, ip = null;
                        DateTime regDate    = DateTime.MinValue;
                        bool     isDeleted  = false;
                        User     userFromDb = new User();
                        foreach (XmlAttribute attribute in user.Attributes)
                        {
                            if (attribute.Name == "first-name")
                            {
                                firstName = attribute.Value;
                            }

                            if (attribute.Name == "last-name")
                            {
                                lastName = attribute.Value;
                            }

                            if (attribute.Name == "username")
                            {
                                username = attribute.Value;
                            }

                            if (attribute.Name == "email")
                            {
                                email = attribute.Value;
                            }

                            if (attribute.Name == "ip-address")
                            {
                                ip = attribute.Value;
                            }

                            if (attribute.Name == "is-deleted")
                            {
                                isDeleted = attribute.Value == "1";
                            }

                            if (attribute.Name == "registration-date")
                            {
                                regDate = DateTime.ParseExact(attribute.Value, "dd/mm/yyyy",
                                                              CultureInfo.InvariantCulture);
                            }
                        }

                        userFromDb = context.Users
                                     .FirstOrDefault(u => u.Username == username);
                        if (userFromDb == null)
                        {
                            userFromDb = new User()
                            {
                                Username         = username,
                                FirstName        = firstName,
                                LastName         = lastName,
                                Email            = email,
                                RegistrationDate = regDate,
                                IsDeleted        = isDeleted,
                                IpAddress        = ip
                            };
                            context.Users.Add(userFromDb);
                            Console.WriteLine("Successfully added user {0}", username);
                        }
                        else
                        {
                            Console.WriteLine("User {0} already exists", username);
                            throw new ArgumentException("User already exists");
                        }

                        foreach (XmlNode game in user.FirstChild.ChildNodes)
                        {
                            string   gameName = "", characterName = "";
                            int?     gameId, userId, characterId, level = null;
                            DateTime?joinedOn   = null;
                            decimal? cash       = null;
                            Game     gameFromDb = new Game();
                            if (game["game-name"] != null)
                            {
                                gameName = game["game-name"].InnerText;
                            }
                            if (game["character"] != null)
                            {
                                foreach (XmlAttribute attribute in game["character"].Attributes)
                                {
                                    if (attribute.Name == "name")
                                    {
                                        characterName = attribute.Value;
                                    }

                                    if (attribute.Name == "cash")
                                    {
                                        cash = decimal.Parse(attribute.Value);
                                    }

                                    if (attribute.Name == "level")
                                    {
                                        level = int.Parse(attribute.Value);
                                    }
                                }
                            }

                            if (game["joined-on"] != null)
                            {
                                joinedOn = DateTime.ParseExact(game["joined-on"].InnerText, "dd/mm/yyyy",
                                                               CultureInfo.InvariantCulture);
                            }

                            gameFromDb = context.Games
                                         .FirstOrDefault(g => g.Name == gameName);

                            if (gameFromDb == null)
                            {
                                throw new ArgumentException("No such game exists");
                            }
                            gameId = gameFromDb.Id;

                            if (userFromDb == null)
                            {
                                throw new ArgumentException("User already exists");
                            }
                            userId = userFromDb.Id;

                            Character character = context.Characters
                                                  .FirstOrDefault(c => c.Name == characterName);
                            characterId = character.Id;

                            context.UsersGames.Add(new UsersGame()
                            {
                                GameId      = gameId.Value,
                                User        = userFromDb,
                                CharacterId = characterId.Value,
                                Level       = level.Value,
                                JoinedOn    = joinedOn.Value,
                                Cash        = cash.Value
                            });
                            Console.WriteLine("User {0} successfully added to game {1}", username, gameName);
                        }
                    }
                    context.SaveChanges();
                }
                catch (ArgumentException ex)
                {
                }
            }
        }
コード例 #7
0
 private static User ProcessUsers(XElement us, DiabloEntities context)
 {
     var username = us.Attribute("username").Value;
     var regDate = us.Attribute("registration-date").Value;
     var isDeleted = us.Attribute("is-deleted").Value;
     var ipAddress = us.Attribute("ip-address").Value;
     string firstName = null;
     string lastName = null;
     string email = null;
     if (us.Attribute("first-name") != null)
     {
         firstName = us.Attribute("first-name").Value;
     }
     if (us.Attribute("last-name") != null)
     {
         lastName = us.Attribute("last-name").Value;
     }
     if (us.Attribute("email") != null)
     {
         email = us.Attribute("email").Value;
     }
     var user = context.Users.FirstOrDefault(u => u.Username == username);
     if (user == null)
     {
         user = new User()
         {
             Username = username,
             FirstName = firstName,
             LastName = lastName,
             RegistrationDate = DateTime.Parse(regDate),
             IsDeleted = int.Parse(isDeleted) != 0,
             IpAddress = ipAddress,
             Email = email
         };
         context.Users.Add(user);
         context.SaveChanges();
         Console.WriteLine("Successfully added user {0}", username);
     }
     else
     {
         Console.WriteLine("User {0} already exists", username);
     }
     return user;
 }
コード例 #8
0
    public static void Main()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("DE-de");
        var context = new DiabloEntities();

        XmlDocument docUsers = new XmlDocument();

        docUsers.Load("..//..//..//..//data//users-and-games.xml");
        string      usersPath = "/users/user";
        XmlNodeList userNodes = docUsers.SelectNodes(usersPath);
        string      gamesPath = "games/game";

        foreach (XmlNode userNode in userNodes)
        {
            string username = userNode.Attributes["username"].Value;
            User   user     = context.Users.Where(u => u.Username == username).FirstOrDefault();

            if (user != null)
            {
                Console.WriteLine("User {0} already exists", user.Username);
                continue;
            }

            user = new User()
            {
                FirstName = userNode.Attributes["first-name"] != null ?
                            userNode.Attributes["first-name"].Value
                : null,
                LastName = userNode.Attributes["last-name"] != null ?
                           userNode.Attributes["last-name"].Value
                : null,
                Username = username,
                Email    = userNode.Attributes["email"] != null ?
                           userNode.Attributes["email"].Value
                : null,
                IpAddress        = userNode.Attributes["ip-address"].Value,
                IsDeleted        = Convert.ToBoolean(int.Parse(userNode.Attributes["is-deleted"].Value)),
                RegistrationDate = DateTime.Parse(userNode.Attributes["registration-date"].Value)
            };

            context.Users.Add(user);

            XmlNodeList xmlGames = userNode.SelectNodes(gamesPath);
            foreach (XmlNode xmlGame in xmlGames)
            {
                string   gameName      = xmlGame.SelectSingleNode("game-name").InnerText;
                string   characterName = xmlGame.SelectSingleNode("character").Attributes["name"].Value;
                decimal  cash          = decimal.Parse(xmlGame.SelectSingleNode("character").Attributes["cash"].Value);
                int      level         = int.Parse(xmlGame.SelectSingleNode("character").Attributes["level"].Value);
                DateTime joinedOn      = DateTime.Parse(xmlGame.SelectSingleNode("joined-on").InnerText);

                var userGame = new UsersGame()
                {
                    //Game name is a non-unique field in the database and duplicates exist. For the task we
                    //admit that we take the first game with this name.
                    Game      = context.Games.Where(g => g.Name == gameName).First(),
                    User      = user,
                    Character = context.Characters.Where(c => c.Name == characterName).First(),
                    Cash      = cash,
                    Level     = level,
                    JoinedOn  = joinedOn
                };

                context.UsersGames.Add(userGame);
            }

            context.SaveChanges();

            //As per the problem terms we can't add a user if any of his games fail to add.
            //That's why we save changes after all the UserGames are in context. If agame fails to add,
            //the user won't be added. We print the user and its games only in case of a successful add in
            //the context

            var addedUser = context.Users
                            .Where(u => u.Username == username)
                            .Select(u => new
            {
                u.Username,
                UserGames = u.UsersGames.Select(ug => ug.Game.Name)
            })
                            .First();

            Console.WriteLine("Successfully added user " + addedUser.Username);
            foreach (var game in user.UsersGames)
            {
                Console.WriteLine("User {0} successfully added to game {1}", user.Username, game.Game.Name);
            }
        }
    }
コード例 #9
0
ファイル: ImportXml.cs プロジェクト: premiera85/SoftUni
        private static void ProcessUserBatch(DiabloEntities context, XElement user)
        {
            // Optional
            string firstName = null;
            string lastName  = null;
            string email     = null;

            if (user.Attribute("first-name") != null)
            {
                firstName = user.Attribute("first-name").Value;
            }

            if (user.Attribute("last-name") != null)
            {
                lastName = user.Attribute("last-name").Value;
            }

            if (user.Attribute("email") != null)
            {
                email = user.Attribute("email").Value;
            }

            // Required
            ValidateRequired(user);

            var username  = user.Attribute("username").Value;
            var ip        = user.Attribute("ip-address").Value;
            var deleted   = int.Parse(user.Attribute("is-deleted").Value);
            var isDeleted = true;

            if (deleted == 0)
            {
                isDeleted = false;
            }

            var registrationDate = DateTime.ParseExact(user.Attribute("registration-date").Value, DateTimeFormat,
                                                       CultureInfo.InvariantCulture);

            var dbUser = context.Users.FirstOrDefault(u => u.Username == username);

            if (dbUser != null)
            {
                var message = string.Format("User {0} already exists", username);
                throw new ArgumentException(message);
            }

            var xmlUser = new User()
            {
                FirstName        = firstName,
                LastName         = lastName,
                Email            = email,
                Username         = username,
                IpAddress        = ip,
                IsDeleted        = isDeleted,
                RegistrationDate = registrationDate
            };

            var gameMessages = new List <string>();
            var games        = user.Elements();

            foreach (var game in games.Elements())
            {
                var userGame = ProcessGame(context, game);

                xmlUser.UsersGames.Add(userGame);
                var gameMessage = string.Format("User {0} successfully added to game {1}", xmlUser.Username, userGame.Game.Name);
                gameMessages.Add(gameMessage);
            }

            context.Users.Add(xmlUser);
            context.SaveChanges();
            Console.WriteLine("Successfully added user {0}", xmlUser.Username);
            Console.WriteLine(string.Join("\n", gameMessages));
        }
コード例 #10
0
        private static User CreateUserIfNotExists(DiabloEntities context, XElement xUser)
        {
            User user      = null;
            var  xUsername = xUser.Attribute("username").Value;

            user = context.Users.FirstOrDefault(u => u.Username == xUsername);

            if (user != null)
            {
                Console.WriteLine("User {0} already exists", xUsername);
            }

            else
            {
                var isDeleted = true;
                if (int.Parse(xUser.Attribute("is-deleted").Value) == 0)
                {
                    isDeleted = false;
                }

                var      ip              = xUser.Attribute("ip-address").Value;
                var      regDate         = xUser.Attribute("registration-date").Value;
                string   format          = "dd/MM/yyyy";
                DateTime regDateToImport = DateTime.ParseExact(regDate, format, CultureInfo.InvariantCulture);

                var firstNameAtt = xUser.Attribute("first-name");
                var lastNameAtt  = xUser.Attribute("last-name");
                var emailAtt     = xUser.Attribute("email");

                string firstName = null;
                string lastName  = null;
                string email     = null;

                if (firstNameAtt != null)
                {
                    firstName = firstNameAtt.Value;
                }

                if (lastNameAtt != null)
                {
                    lastName = lastNameAtt.Value;
                }

                if (emailAtt != null)
                {
                    email = emailAtt.Value;
                }

                user = new User
                {
                    Username         = xUsername,
                    FirstName        = firstName,
                    LastName         = lastName,
                    Email            = email,
                    IpAddress        = ip,
                    RegistrationDate = regDateToImport,
                    IsDeleted        = isDeleted
                };

                context.Users.Add(user);
                context.SaveChanges();
                Console.WriteLine("Successfully added user {0}", xUsername);
            }

            return(user);
        }
コード例 #11
0
ファイル: ImportXml.cs プロジェクト: peterkirilov/SoftUni-1
        private static void ProcessUserBatch(DiabloEntities context, XElement user)
        {
            // Optional
            string firstName = null;
            string lastName = null;
            string email = null;
            if (user.Attribute("first-name") != null)
            {
                firstName = user.Attribute("first-name").Value;
            }

            if (user.Attribute("last-name") != null)
            {
                lastName = user.Attribute("last-name").Value;
            }

            if (user.Attribute("email") != null)
            {
                email = user.Attribute("email").Value;
            }

            // Required
            ValidateRequired(user);

            var username = user.Attribute("username").Value;
            var ip = user.Attribute("ip-address").Value;
            var deleted = int.Parse(user.Attribute("is-deleted").Value);
            var isDeleted = true;
            if (deleted == 0)
            {
                isDeleted = false;
            }

            var registrationDate = DateTime.ParseExact(user.Attribute("registration-date").Value, DateTimeFormat,
                CultureInfo.InvariantCulture);

            var dbUser = context.Users.FirstOrDefault(u => u.Username == username);
            if (dbUser != null)
            {
                var message = string.Format("User {0} already exists", username);
                throw new ArgumentException(message);
            }

            var xmlUser = new User()
            {
                FirstName = firstName,
                LastName = lastName,
                Email = email,
                Username = username,
                IpAddress = ip,
                IsDeleted = isDeleted,
                RegistrationDate = registrationDate
            };

            var gameMessages = new List<string>();
            var games = user.Elements();
            foreach (var game in games.Elements())
            {
                var userGame = ProcessGame(context, game);

                xmlUser.UsersGames.Add(userGame);
                var gameMessage = string.Format("User {0} successfully added to game {1}", xmlUser.Username, userGame.Game.Name);
                gameMessages.Add(gameMessage);
            }

            context.Users.Add(xmlUser);
            context.SaveChanges();
            Console.WriteLine("Successfully added user {0}", xmlUser.Username);
            Console.WriteLine(string.Join("\n", gameMessages));
        }
コード例 #12
0
        static void Main()
        {
            var context  = new DiabloEntities();
            var xmlDoc   = XDocument.Load(@"..\..\..\users-and-games.xml");
            var allUsers = xmlDoc.XPathSelectElements("users/user");

            foreach (var xElement in allUsers)
            {
                string firstName = null;
                if (xElement.Attribute("first-name") != null)
                {
                    firstName = xElement.Attribute("first-name").Value;
                }

                string lastName = null;
                if (xElement.Attribute("last-name") != null)
                {
                    lastName = xElement.Attribute("last-name").Value;
                }

                string email = null;
                if (xElement.Attribute("email") != null)
                {
                    email = xElement.Attribute("email").Value;
                }

                string   username     = xElement.Attribute("username").Value;
                string   ip           = xElement.Attribute("ip-address").Value;
                DateTime registeredOn = DateTime.Parse(xElement.Attribute("registration-date").Value);
                bool     isDeleted    = xElement.Attribute("is-deleted").Value.Equals("1");

                var dbUser = context.Users.FirstOrDefault(u => u.Username == username);
                if (dbUser == null)
                {
                    var newUser = new User()
                    {
                        FirstName        = firstName,
                        LastName         = lastName,
                        Email            = email,
                        Username         = username,
                        IpAddress        = ip,
                        RegistrationDate = registeredOn,
                        IsDeleted        = isDeleted
                    };
                    context.Users.Add(newUser);
                    context.SaveChanges();
                    Console.WriteLine("Successfully added user {0}", username);

                    var userGames = xElement.XPathSelectElements("games/game");
                    foreach (var userGame in userGames)
                    {
                        var      gameName  = userGame.Element("game-name").Value;
                        var      character = userGame.Element("character");
                        var      charName  = character.Attribute("name").Value;
                        var      cash      = Decimal.Parse(character.Attribute("cash").Value);
                        var      level     = int.Parse(character.Attribute("level").Value);
                        DateTime joinedOn  = DateTime.Parse(userGame.Element("joined-on").Value);

                        var addUserToGame = new UsersGame()
                        {
                            GameId      = context.Games.FirstOrDefault(g => g.Name.Equals(gameName)).Id,
                            UserId      = context.Users.FirstOrDefault(u => u.Username.Equals(username)).Id,
                            CharacterId = context.Characters.FirstOrDefault(c => c.Name.Equals(charName)).Id,
                            Level       = level,
                            JoinedOn    = joinedOn,
                            Cash        = cash
                        };
                        context.UsersGames.Add(addUserToGame);
                        context.SaveChanges();
                        Console.WriteLine("User {0} successfully added to game {1}", username, gameName);
                    }
                }
                else
                {
                    Console.WriteLine("User {0} already exists", username);
                }
            }
        }
コード例 #13
0
        static void Main()
        {
            var            diabloContext = new DiabloEntities();
            Queue <string> output        = new Queue <string>();

            var            xmlDocument   = XDocument.Load("../../users-and-games.xml");
            var            userNodes     = xmlDocument.XPathSelectElements("/users/user");
            List <UserDTO> users         = new List <UserDTO>();
            var            allUsers      = diabloContext.Users.ToList();
            var            allCharacters = diabloContext.Characters.ToList();
            var            allUsersGames = diabloContext.UsersGames.ToList();
            var            allGames      = diabloContext.Games.ToList();

            foreach (var userNode in userNodes)
            {
                UserDTO currentUser = null;

                string   firstName        = null;
                string   lastName         = null;
                string   email            = null;
                string   username         = userNode.Attribute("username").Value;
                bool     isDeleted        = userNode.Attribute("is-deleted").Value == "1";
                string   ipAddress        = userNode.Attribute("ip-address").Value;
                DateTime registrationDate = Convert.ToDateTime(userNode.Attribute("registration-date").Value);

                if (userNode.Attribute("first-name") != null)
                {
                    firstName = userNode.Attribute("first-name").Value;
                }

                if (userNode.Attribute("last-name") != null)
                {
                    lastName = userNode.Attribute("last-name").Value;
                }

                if (userNode.Attribute("email") != null)
                {
                    email = userNode.Attribute("email").Value;
                }

                currentUser = new UserDTO()
                {
                    FirstName        = firstName,
                    LastName         = lastName,
                    Username         = username,
                    Email            = email,
                    IsDeleted        = isDeleted,
                    IpAddress        = ipAddress,
                    RegistrationDate = registrationDate
                };

                var gameNodes = userNode.XPathSelectElements("games/game");
                foreach (var gameNode in gameNodes)
                {
                    XElement characterNode = gameNode.XPathSelectElement("character");

                    string   gameName       = gameNode.XPathSelectElement("game-name").Value;
                    DateTime joinedOn       = Convert.ToDateTime(gameNode.XPathSelectElement("joined-on").Value);
                    string   characterName  = characterNode.Attribute("name").Value;
                    decimal  characterCash  = Decimal.Parse(characterNode.Attribute("cash").Value);
                    int      characterLevel = int.Parse(characterNode.Attribute("level").Value);

                    CharacterDTO currentCharacter = new CharacterDTO()
                    {
                        Name  = characterName,
                        Cash  = characterCash,
                        Level = characterLevel
                    };

                    GameDTO currentGame = new GameDTO()
                    {
                        Name      = gameName,
                        JoinedOn  = joinedOn,
                        Character = currentCharacter
                    };

                    currentUser.Games.Add(currentGame);
                }

                users.Add(currentUser);
            }

            foreach (var user in users)
            {
                var currentUser = allUsers.Where(u => u.Username == user.Username).FirstOrDefault();

                if (currentUser == null)
                {
                    currentUser = new User()
                    {
                        Username         = user.Username,
                        FirstName        = user.FirstName,
                        LastName         = user.LastName,
                        Email            = user.Email,
                        RegistrationDate = user.RegistrationDate,
                        IsDeleted        = user.IsDeleted,
                        IpAddress        = user.IpAddress,
                        UsersGames       = new HashSet <UsersGame>()
                    };

                    diabloContext.Users.Add(currentUser);
                    output.Enqueue(string.Format("Successfully added user {0}", currentUser.Username));

                    foreach (var game in user.Games)
                    {
                        UsersGame currentGame = new UsersGame()
                        {
                            GameId    = allGames.Where(g => g.Name == game.Name).Select(g => g.Id).FirstOrDefault(),
                            Level     = game.Character.Level,
                            Cash      = game.Character.Cash,
                            Character = allCharacters.Where(c => c.Name == game.Character.Name).FirstOrDefault(),
                            JoinedOn  = game.JoinedOn
                        };

                        currentUser.UsersGames.Add(currentGame);
                        output.Enqueue(string.Format("User {0} successfully added to game {1}", user.Username, game.Name));
                    }
                }
                else
                {
                    output.Enqueue(string.Format("User {0} already exists", currentUser.Username));
                }

                diabloContext.SaveChanges();
            }

            while (output.Count > 0)
            {
                Console.WriteLine(output.Dequeue());
            }
        }