public async Task SetTokenAsync(ApplicationUser user, string loginProvider, string name, string value, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            using (var adapter = new DataAccessAdapter())
            {
                var qf = new QueryFactory();
                var q  = qf.AspNetUserToken
                         .Where(AspNetUserTokenFields.UserId.Equal(user.Id)
                                .And(AspNetUserTokenFields.LoginProvider.Equal(loginProvider))
                                .And(AspNetUserTokenFields.Name.Equal(name)));

                var userToken = await adapter.FetchFirstAsync(q, cancellationToken);

                if (userToken == null)
                {
                    userToken = new AspNetUserTokenEntity();
                }
                userToken.UserId        = user.Id;
                userToken.LoginProvider = user.LoginProvider;
                userToken.Name          = name;
                userToken.Value         = value;

                await adapter.SaveEntityAsync(userToken, cancellationToken);
            }
        }
        public async Task ReplaceCodesAsync(ApplicationUser user, IEnumerable <string> recoveryCodes, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            using (var adapter = new DataAccessAdapter())
            {
                var qf = new QueryFactory();
                var q  = qf.AspNetUserToken
                         .Where(AspNetUserTokenFields.UserId.Equal(user.Id)
                                .And(AspNetUserTokenFields.LoginProvider.Equal(user.LoginProvider))
                                .And(AspNetUserTokenFields.Name.Equal(user.LoginRecoveryTokenKey)));

                var userTokenEntity = await adapter.FetchFirstAsync(q, cancellationToken);

                if (userTokenEntity == null)
                {
                    userTokenEntity = new AspNetUserTokenEntity();
                }
                userTokenEntity.UserId        = user.Id;
                userTokenEntity.LoginProvider = user.LoginProvider;
                userTokenEntity.Name          = user.LoginRecoveryTokenKey;
                userTokenEntity.Value         = string.Join(";", recoveryCodes);

                await adapter.SaveEntityAsync(userTokenEntity, cancellationToken);
            }
        }