public static Account Create(string username, string password)
        {
            var passwordSalt = new byte[64];
            new RNGCryptoServiceProvider().GetBytes(passwordSalt);
            var passwordHash =
                SHA512.Create().ComputeHash(Encoding.Unicode.GetBytes(password).Concat(passwordSalt).ToArray());
            var account = new Account
            {
                Username = username,
                Salt = passwordSalt,
                Password = passwordHash,
                Banned = false,
                Created = DateTime.Now,
                Characters = new List<string>(4),
                SelectedCharacter = null
            };

            return account;
        }
 /// <summary>
 ///     Updates the data of an existing account. (Maybe you want to change the password, or add/remove users, or ban/unban
 ///     the account?)
 /// </summary>
 /// <param name="account">The account to update.</param>
 public void UpdateAccount(Account account)
 {
     using (var transaction = Session.BeginTransaction())
     {
         Session.SaveOrUpdate(account);
         transaction.Commit();
     }
 }
        /// <summary>
        ///     Deletes the specified account.
        /// </summary>
        /// <param name="account">The account to delete.</param>
        public void DeleteAccount(Account account)
        {
            // Delete its characters
            foreach (var character in account.Characters)
            {
                if (!CharacterExists(character)) continue; // Maybe this character was deleted by error, or otherwise?
                DeleteCharacter(GetCharacter(character));
            }

            using (var transaction = Session.BeginTransaction())
            {
                Session.Delete(account);
                transaction.Commit();
            }
        }