private static void Main()
        {
            var context = new DiabloEntities();

            XmlDocument doc = new XmlDocument();
            doc.Load("../../users-and-games.xml");

            XmlElement root = doc.DocumentElement;

            foreach (XmlNode xmlUser in root.ChildNodes)
            {
                User user = ExtractUserData(xmlUser);

                if (context.Users.Any(u => u.Username == user.Username))
                {
                    Console.WriteLine("User {0} already exists", user.Username);
                    continue;
                }
                else
                {
                    context.Users.Add(user);
                    Console.WriteLine("Successfully added user {0}", user.Username);
                }

                XmlNode gamesNode = xmlUser.SelectSingleNode("games");
                foreach (XmlNode xmlGame in gamesNode)
                {

                    string[] joined = xmlGame.SelectSingleNode("joined-on").InnerText.Split('/').ToArray();
                    int year = int.Parse(joined[2]);
                    int month = int.Parse(joined[1]);
                    int day = int.Parse(joined[0]);
                    XmlNode xmlCharacter = xmlGame.SelectSingleNode("character");

                    string characterName = xmlCharacter.Attributes["name"].Value;
                    decimal characterCash = decimal.Parse(xmlCharacter.Attributes["cash"].Value);
                    int characterLevel = int.Parse(xmlCharacter.Attributes["level"].Value);
                    DateTime joinedOn = new DateTime(year, month, day);
                    string gameName = xmlGame.SelectSingleNode("game-name").InnerText;

                    UsersGame newGame = new UsersGame
                    {
                        User = user,
                        Cash = characterCash,
                        Level = characterLevel,
                        Character = context.Characters.FirstOrDefault(c => c.Name == characterName),
                        JoinedOn = joinedOn,
                        Game = context.Games.FirstOrDefault(g => g.Name == gameName)
                    };

                    context.UsersGames.Add(newGame);
                    Console.WriteLine("User {0} successfully added to game {1}", user.Username, gameName);
                }

                //save here to make sure either the user with all games is saved, or nothing
                context.SaveChanges();
            }
        }
 static void Main()
 {
     var context = new DiabloEntities();
     var testQuery = context.Characters.Select(ch => ch.Name);
     foreach (var character in testQuery)
     {
         Console.WriteLine(character);
     }
 }
        static void Main()
        {
            var context = new DiabloEntities();

            var characterNames = context.Characters
                .Select(c => c.Name)
                .ToList();

            foreach (var name in characterNames)
            {
                Console.WriteLine(name);
            }
        }
        static void Main()
        {
            Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

            var context = new DiabloEntities();

            var gamesQuery = context.Games
                .Where(g => g.IsFinished == true)
                .Select(g => new
                {
                    GameName = g.Name,
                    GameDuration = g.Duration,
                    GameUsers = g.UsersGames
                        .Select(u => new
                        {
                            u.User.Username,
                            u.User.IpAddress
                        })
                })
                .OrderBy(g => g.GameName)
                .ThenBy(g => g.GameDuration)
                .ToList();

            XElement games = new XElement("games");

            foreach (var game in gamesQuery)
            {
                XElement xmlGame = new XElement("game",
                    new XAttribute("name", game.GameName));

                if (game.GameDuration != null)
                {
                    xmlGame.Add(new XAttribute("duration", game.GameDuration));
                }

                var xmlUsers = new XElement("users");

                foreach (var user in game.GameUsers)
                {
                    xmlUsers.Add(new XElement("user",
                        new XAttribute("username", user.Username),
                        new XAttribute("ip-address", user.IpAddress)));
                }

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

            games.Save("../../finished-games.xml");
        }
        static void Main()
        {
            var context = new DiabloEntities();
            var gamesQuery = context.Games
                .Where(g => g.IsFinished)
                .OrderBy(g => g.Name)
                .ThenBy(g => g.Duration)
                .Select(g => new
                {
                    GameName = g.Name,
                    Duration = g.Duration,
                    Users = g.UsersGames
                        .Select(u => new
                        {
                            UserName = u.User.Username,
                            IpAdress = u.User.IpAddress
                        })
                })
                .ToList();

            var xmlGames = new XElement("games");

            foreach (var game in gamesQuery)
            {
                var xmlGame = new XElement("game");
                xmlGame.Add(new XAttribute("name", game.GameName));
                if (game.Duration != null)
                {
                    xmlGame.Add(new XAttribute("duration", game.Duration));
                }

                var xmlUsers = new XElement("users");

                foreach (var user in game.Users)
                {
                    xmlUsers.Add(new XElement("user",
                        new XAttribute("username", user.UserName),
                        new XAttribute("ip-address", user.IpAdress)));

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

            var xmlDoc = new XDocument(xmlGames);
            xmlDoc.Save("../../finished-games.xml");
        }
        static void Main()
        {
            var context = new DiabloEntities();

            var charactersQuery = context.Characters
                .OrderBy(ch => ch.Name)
                .Select(ch => new
                {
                    name = ch.Name,
                    playedBy = ch.UsersGames.Select(u => u.User.Username)
                })
                .ToList();

            var jsSerializer = new JavaScriptSerializer();
            var charsJson = jsSerializer.Serialize(charactersQuery);
            File.WriteAllText("../../characters.json", charsJson);
        }
        static void Main()
        {
            var context = new DiabloEntities();

            var characters = context.Characters
                .Select(c => new
                {
                    CharacterName = c.Name,
                    PlayedBy =
                        c.UsersGames.
                        Select(u => new
                        {
                            u.User.Username
                        })
                })
                .OrderBy(c => c.CharacterName)
                .ToList();

            var json = new JavaScriptSerializer().Serialize(characters);
            File.WriteAllText("../../characters.json", json);
        }