private static void AddUserToGame(User user, IEnumerable<XElement> gameNodes, DiabloEntities context)
        {
            foreach (var gameNode in gameNodes)
            {
                string gameName = gameNode.Element("game-name").Value;
                Game game = context.Games.FirstOrDefault(g => g.Name == gameName);
                if (!user.UsersGames.Any(ug => ug.Game.Name == gameName))
                {
                    XElement characterNode = gameNode.Element("character");
                    string characterName = characterNode.Attribute("name").Value;
                    decimal cash = decimal.Parse(characterNode.Attribute("cash").Value);
                    int level = int.Parse(characterNode.Attribute("level").Value);
                    DateTime joinDate = DateTime.Parse(gameNode.Element("joined-on").Value);
                    Character character = context.Characters.FirstOrDefault(c => c.Name == characterName);

                    UsersGame userGame = new UsersGame()
                    {
                        Cash = cash,
                        JoinedOn = joinDate,
                        Level = level,
                        Character = character,
                        Game = game,
                        User = user,
                    };

                    context.UsersGames.Add(userGame);
                    context.SaveChanges();

                    Console.WriteLine("User {0} successfully added to game {1}", user.Username, gameName);
                }
            }
        }
        public static void Main()
        {
            var context = new DiabloEntities();
            var characterNames = context.Characters.Select(c => c.Name);

            foreach (var characterName in characterNames)
            {
                Console.WriteLine(characterName);
            }
        }
        private static User CreateUserIfNotExist(XElement userNode, DiabloEntities context)
        {
            User user = null;
            string username = userNode.Attribute("username").Value;
            user = context.Users.FirstOrDefault(u => u.Username == username);
            if (user != null)
            {
                Console.WriteLine("User {0} already exists", username);
            }
            else
            {
                string newUserUsername = userNode.Attribute("username").Value;
                string ipAddress = userNode.Attribute("ip-address").Value;
                DateTime registrationDate = DateTime.Parse(userNode.Attribute("registration-date").Value);
                bool isDeleted = userNode.Attribute("is-deleted").Value == "1";

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

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

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

                user = new User()
                {
                    Username = newUserUsername,
                    IpAddress = ipAddress,
                    RegistrationDate = registrationDate,
                    IsDeleted = isDeleted,
                    FirstName = firstName,
                    LastName = lastName,
                    Email = email
                };

                context.Users.Add(user);
                context.SaveChanges();

                Console.WriteLine("Successfully added user {0}", newUserUsername);
            }

            return user;
        }
        public static void Main()
        {
            var context = new DiabloEntities();
            var finishedGames = context.Games
                .OrderBy(g => g.Name)
                .ThenBy(g => g.Duration)
                .Where(g => g.IsFinished)
                .Select(g => new
                {
                    GameName = g.Name,
                    GameDuration = g.Duration,
                    Users = g.UsersGames
                        .Select(ug => new
                        {
                            Username = ug.User.Username,
                            IpAddress = ug.User.IpAddress
                        })
                });

            var xmlGames = new XElement("games");
            foreach (var finishedGame in finishedGames)
            {
                var xmlGame = new XElement("game");
                var xmlGameName = new XAttribute("name", finishedGame.GameName);

                xmlGame.Add(xmlGameName);
                if (finishedGame.GameDuration != null)
                {
                    var xmlGameDuration = new XAttribute("duration", finishedGame.GameDuration);
                    xmlGame.Add(xmlGameDuration);
                }

                var xmlUsers = new XElement("users");
                foreach (var user in finishedGame.Users)
                {
                    var xmlUser = new XElement("user");
                    var xmlUsernameAttribute = new XAttribute("username", user.Username);
                    var xmlUserIpAttribute = new XAttribute("ip-address", user.IpAddress);

                    xmlUser.Add(xmlUsernameAttribute);
                    xmlUser.Add(xmlUserIpAttribute);

                    xmlUsers.Add(xmlUser);
                }

                xmlGame.Add(xmlUsers);
                xmlGames.Add(xmlGame);
            }

            var xmlDoc = new XDocument(xmlGames);
            xmlDoc.Save(@"..\..\finished-games.xml");
            Console.WriteLine("Finished games exported to finished-games.xml");
        }
        public static void Main()
        {
            var context = new DiabloEntities();

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

            foreach (var userNode in userNodes)
            {
                User user = CreateUserIfNotExist(userNode, context);
                var gameNodes = userNode.XPathSelectElements("games/game");
                AddUserToGame(user, gameNodes, context);
            }
        }
        public static void Main()
        {
            var context = new DiabloEntities();
            var characters = context.Characters
                .OrderBy(c => c.Name)
                .Select(c => new
                {
                    Name = c.Name,
                    PlayedBy = c.UsersGames
                        .Select(ug => ug.User.Username)
                });

            var jsSerializer = new JavaScriptSerializer();
            var jsonLeagues = jsSerializer.Serialize(characters.ToList());

            File.WriteAllText(@"..\..\characters.json", jsonLeagues);
            Console.WriteLine("File characters.json exported.");
        }