private static void ValidateUniqueName(Models.IdentityProvider item, DatabaseContext entities)
 {
     var othersWithSameName =
         from e in entities.IdentityProviders
         where e.Name == item.Name && e.Id != item.ID
         select e;
     if (othersWithSameName.Any()) throw new ValidationException(string.Format(Resources.IdentityProviderRepository.NameAlreadyInUseError, item.Name));
 }
 public bool TryGet(string name, out Models.IdentityProvider identityProvider)
 {
     using (var entities = DatabaseContext.Get())
     {
         identityProvider = entities.IdentityProviders.Where(idp => idp.Name == name).FirstOrDefault().ToDomainModel();
         return (identityProvider != null);
     }
 }
 public void Add(Models.IdentityProvider item)
 {
     using (var entities = DatabaseContext.Get())
     {
         ValidateUniqueName(item, entities);
         var entity = item.ToEntity();
         entities.IdentityProviders.Add(entity);
         entities.SaveChanges();
         item.ID = (int)entity.Id;
     }
 }
        public void Update(Models.IdentityProvider item)
        {
            using (var entities = DatabaseContext.Get())
            {
                ValidateUniqueName(item, entities);

                var dbitem = entities.IdentityProviders.Where(idp => idp.Id == item.ID).FirstOrDefault();
                if (dbitem != null)
                {
                    item.UpdateEntity(dbitem);
                    entities.SaveChanges();
                }
            }
        }
        public bool TryGetClient(string clientId, out Models.Client client)
        {
            using (var entities = DatabaseContext.Get())
            {
                var record = (from c in entities.Clients
                              where c.ClientId.Equals(clientId, StringComparison.Ordinal)
                              select c).SingleOrDefault();

                if (record != null)
                {
                    client = record.ToDomainModel();
                    return true;
                }

                client = null;
                return false;
            }
        }
        public bool ValidateAndGetClient(string clientId, string clientSecret, out Models.Client client)
        {
            using (var entities = DatabaseContext.Get())
            {
                var record = (from c in entities.Clients
                              where c.ClientId.Equals(clientId, StringComparison.Ordinal)
                              select c).SingleOrDefault();
                if (record != null)
                {
                    if (CryptoHelper.VerifyHashedPassword(record.ClientSecret, clientSecret))
                    {
                        client = record.ToDomainModel();
                        return true;
                    }
                }

                client = null;
                return false;
            }
        }
        public void Update(Models.Client model)
        {
            if (model == null) throw new ArgumentException("model");

            using (var entities = DatabaseContext.Get())
            {
                var item = entities.Clients.Where(x => x.Id == model.ID).Single();
                model.UpdateEntity(item);
                entities.SaveChanges();
            }
        }
        public void Create(Models.Client model)
        {
            if (model == null) throw new ArgumentException("model");

            using (var entities = DatabaseContext.Get())
            {
                var item = new Client();
                model.UpdateEntity(item);
                entities.Clients.Add(item);
                entities.SaveChanges();
                model.ID = item.Id;
            }
        }