/// <summary>
        /// Refreshes an access token by expiring the existing tokens and creating a new appauthorization entry
        /// TODO: allow expiration dates
        /// </summary>
        /// <param name="appAuth"></param>
        /// <returns></returns>
        public static AppAuthorization AccessTokenRefresh(AppAuthorization appAuth)
        {
            // expire previous token
            using(AuthorizationDataContext oauthDataCtxt = new AuthorizationDataContext(System.Configuration.ConfigurationManager.ConnectionStrings["OAuthDb"].ConnectionString))
            {
                /// expire old auth
                var oldAppAuth = oauthDataCtxt.AppAuthorizations.First( a => a.Id == appAuth.Id);
                oldAppAuth.AuthTokenExpiration = DateTime.UtcNow;
                oldAppAuth.RefreshTokenExpiration = DateTime.UtcNow;

                // create new auth
                var newAppAuth = new AppAuthorization()
                {
                    AppId = appAuth.AppId,
                    UserId = appAuth.UserId,
                    Scope = appAuth.Scope,
                    AuthToken = GenerateToken(),
                    RefreshToken = GenerateToken(),
                    Created = DateTime.UtcNow
                };

                oauthDataCtxt.AppAuthorizations.InsertOnSubmit(newAppAuth);

                oauthDataCtxt.SubmitChanges();

                return newAppAuth as AppAuthorization;
            }
        }
 partial void DeleteAppAuthorization(AppAuthorization instance);
 partial void UpdateAppAuthorization(AppAuthorization instance);
 partial void InsertAppAuthorization(AppAuthorization instance);
		private void detach_AppAuthorizations(AppAuthorization entity)
		{
			this.SendPropertyChanging();
			entity.User = null;
		}
		private void attach_AppAuthorizations(AppAuthorization entity)
		{
			this.SendPropertyChanging();
			entity.Application = this;
		}