public async Task<bool> ChangePassword(string userName, string oldPw, AddUserDTO user)
        {
            if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(oldPw) || user == null)
            {
                return false;
            }

            var requestString = BaseUri.AbsoluteUri + "/ChangePassword";
            var credentials = new NetworkCredential(userName, oldPw);

            using (var client = new HttpClient(new HttpClientHandler() { Credentials = credentials }))
            {
                var result = await DatabaseStatusService.StartRequestWhenReady(async () => await client.PostAsXmlAsync(requestString, user), Enums.UpdateKind.Saving);

                if (result.IsSuccessStatusCode)
                {
                    return true;
                }
                else if (result.StatusCode == HttpStatusCode.Unauthorized)
                {
                    throw new UserNotAuthorizedException("Could not change password - old password incorrect");
                }
                else
                {
                    throw new WebException("Could not change password - " + result.StatusCode);
                }
            }
        }
        public async Task<UserDTO> GetUserAsync(string UserId)
        {
            var requestString = string.Format(BaseUri.AbsoluteUri + "/User?id=" + UserId);

            using (var client = new HttpClient(new HttpClientHandler() { Credentials = userCredentials }))
            {
                var request = await DatabaseStatusService.StartRequestWhenReady(async () => await client.GetAsync(requestString), Enums.UpdateKind.Loading);

                if (request.IsSuccessStatusCode)
                {
                    var result = await request.Content.ReadAsAsync<UserDTO>();
                    return result;
                }
            }
            return null;
        }
        public async Task<NetworkCredential> AuthenticateUserAsync(string userName, string password)
        {
            var requestString = string.Format(BaseUri.AbsoluteUri + "/User");
            var credentials = new NetworkCredential(userName, password);

            using (var client = new HttpClient(new HttpClientHandler() { Credentials = credentials }))
            {
                var request = await DatabaseStatusService.StartRequestWhenReady(async () => await client.GetAsync(requestString), Enums.UpdateKind.Loading);

                if (request.IsSuccessStatusCode)
                {
                    var result = await request.Content.ReadAsAsync<bool>();
                    return credentials;
                }
            }
            return null;
        }
        //private ObservableCollection<SessionBase> sessions;
        //public ReadOnlyObservableCollection<SessionBase> Sessions => new ReadOnlyObservableCollection<SessionBase>(sessions);

        //private List<Season> ActiveSeasons { get; } = new List<Season>();
        //private List<Schedule> ActiveSchedules { get; } = new List<Schedule>();
        //private List<SessionBase> ActiveSessions { get; } = new List<SessionBase>();

        public LeagueContext() : base()
        {
            var apiAddress = GetApiAddress();

            var modelCache            = new ModelCache();
            var databaseStatusService = new DatabaseStatusService()
            {
                BaseUri = new Uri(apiAddress)
            };
            var userDatabase = new UserDatabaseClient(new Uri(apiAddress))
            {
                DatabaseStatusService = databaseStatusService
            };

            UserCredentialsManager = new UserCredentialsManager(userDatabase);
            userDatabase.SetCredentials(UserCredentialsManager);
            MapperProfile = new ModelMapperProfile(modelCache);
            //DbContext = new DbLeagueServiceClient(new WCFLeagueDbClientWrapper());
            //DbContext.OpenConnection();
            //DbContext.SetDatabaseName(DatabaseName);
            LocationMapperProfile       = new LocationMapperProfile(LocationCollection);
            MapperProfile.LeagueContext = this;
            memberList          = new ObservableCollection <LeagueMember>();
            MapperConfiguration = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(MapperProfile);
                cfg.AddProfile(LocationMapperProfile);
                cfg.AddCollectionMappers();
            });
            seasons       = new ObservableCollection <SeasonModel>();
            ModelDatabase = new ASPRestAPIClientWrapper(new Uri(apiAddress), LeagueName, UserCredentialsManager)
            {
                DatabaseStatusService = databaseStatusService
            };
            LeagueDataProvider = (ILeagueDataProvider)ModelDatabase;
            ModelContext       = ModelDatabase;
            ModelManager       = new ModelManager(modelCache, ModelContext, MapperConfiguration);
            UserManager        = new UserManager(modelCache, UserCredentialsManager, userDatabase);
            TracksDataProvider = (ITracksDataProvider)ModelDatabase;
            //_ = UpdateMemberList();
        }
        public async Task<UserProfileDTO> AddUserAsync(AddUserDTO user)
        {
            if (user == null)
                return null;

            var requestString = BaseUri.AbsoluteUri + "/User";

            using (var client = new HttpClient())
            {
                var request = await DatabaseStatusService.StartRequestWhenReady(async () => await client.PostAsXmlAsync(requestString, user), Enums.UpdateKind.Saving);

                if (request.IsSuccessStatusCode)
                {
                    var result = await request.Content.ReadAsAsync<UserProfileDTO>();
                    return result;
                }
                else if (request.StatusCode == HttpStatusCode.Conflict)
                {
                    throw new UserExistsException();
                }
            }
            return null;
        }