public IFlexMembershipUser CreateOAuthAccount(string provider, string providerUserId, string username)
        {
            var users = _context.Set <TUser>();
            var user  = users.Include(u => u.OAuthAccounts).SingleOrDefault(u => u.Username == username);

            if (user == null)
            {
                user = new TUser {
                    Username = username
                };
                users.Add(user);
            }
            var account = new FlexOAuthAccount {
                Provider = provider, ProviderUserId = providerUserId
            };

            if (user.OAuthAccounts == null)
            {
                user.OAuthAccounts = new Collection <FlexOAuthAccount>();
            }
            user.OAuthAccounts.Add(account);
            _context.SaveChanges();

            return(user);
        }
        public IFlexMembershipUser CreateOAuthAccount(string provider, string providerUserId, IFlexMembershipUser user)
        {
            var account = new FlexOAuthAccount {
                Provider = provider, ProviderUserId = providerUserId
            };

            if (user.OAuthAccounts == null)
            {
                user.OAuthAccounts = new Collection <FlexOAuthAccount>();
            }
            user.OAuthAccounts.Add(account);
            _userCollection.Save(user);

            return(user);
        }
        public TUser CreateOAuthAccount(string provider, string providerUserId, TUser user)
        {
            var account = new FlexOAuthAccount {
                Provider = provider, ProviderUserId = providerUserId
            };

            if (user.OAuthAccounts == null)
            {
                user.OAuthAccounts = new Collection <FlexOAuthAccount>();
            }
            user.OAuthAccounts.Add(account);
            _session.SaveChanges();

            return(user);
        }
        public bool DeleteOAuthAccount(string provider, string providerUserId)
        {
            TUser user =
                _userCollection.AsQueryable().SingleOrDefault(
                    u => u.OAuthAccounts.Any(o => o.ProviderUserId == providerUserId && o.Provider == provider));

            if (user != null)
            {
                if (user.OAuthAccounts.Count() > 1 || !string.IsNullOrEmpty(user.Password))
                {
                    FlexOAuthAccount account =
                        user.OAuthAccounts.Single(o => o.Provider == provider && o.ProviderUserId == providerUserId);
                    user.OAuthAccounts.Remove(account);
                    _userCollection.Save(user);
                    return(true);
                }
            }
            return(false);
        }
        public IFlexMembershipUser CreateOAuthAccount(string provider, string providerUserId, string username)
        {
            TUser user = _userCollection.AsQueryable().SingleOrDefault(u => u.Username == username);

            if (user == null)
            {
                user = new TUser {
                    Username = username
                };
                _userCollection.Save(user);
            }
            var account = new FlexOAuthAccount {
                Provider = provider, ProviderUserId = providerUserId
            };

            if (user.OAuthAccounts == null)
            {
                user.OAuthAccounts = new Collection <FlexOAuthAccount>();
            }
            user.OAuthAccounts.Add(account);
            _userCollection.Save(user);

            return(user);
        }