public void Update(UserProfileDb profile)
 {
     if (profile != null)
     {
         context.Entry(profile).State = EntityState.Modified;
         context.SaveChanges();
     }
 }
        public async Task <Result <UserProfileDb> > AddAsync(UserProfileDb profileDb)
        {
            try
            {
                List <CourseCategoryDb> courseCategories = new List <CourseCategoryDb>();
                List <DomainDb>         domains          = new List <DomainDb>();
                CourseCategoryDb        categoryDb;
                DomainDb domainDb;

                foreach (var el in profileDb.SearchCriteria.CourseCategories)
                {
                    categoryDb = context.CourseCategories
                                 .FirstOrDefault(x => x.Name == el.Name && x.Title == el.Title);
                    courseCategories.Add(categoryDb ??
                                         new CourseCategoryDb()
                    {
                        Name  = el.Name,
                        Title = el.Title
                    });
                }

                foreach (var el in profileDb.SearchCriteria.Domains)
                {
                    domainDb = context.Domains
                               .FirstOrDefault(x => x.DomainURL == el.DomainURL);
                    domains.Add(domainDb ??
                                new DomainDb()
                    {
                        DomainURL  = el.DomainURL,
                        DomainName = el.DomainName
                    });
                }
                profileDb.SearchCriteria.CourseCategories = courseCategories;
                profileDb.SearchCriteria.Domains          = domains;

                context.Profiles.Add(profileDb);
                await context.SaveChangesAsync().ConfigureAwait(false);

                return(Result <UserProfileDb> .Ok(profileDb));
            }
            catch (DbUpdateConcurrencyException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Cannot save profile. {e.Message}"));
            }
            catch (DbUpdateException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Cannot save profile. Duplicate field. {e.Message}"));
            }
            catch (DbEntityValidationException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Invalid profile. {e.Message}"));
            }
        }
        public async Task <Result <UserProfileDb> > DeleteAsync(UserProfileDb profileDb)
        {
            try
            {
                context.Profiles.Remove(profileDb);
                await context.SaveChangesAsync().ConfigureAwait(false);

                return(Result <UserProfileDb> .Ok(profileDb));
            }
            catch (DbUpdateConcurrencyException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Profile not deleted. {e.Message}"));
            }
            catch (DbEntityValidationException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Invalid profile. {e.Message}"));
            }
        }
        public async Task <Result <UserProfileDb> > UpdateAsync(UserProfileDb profileDb)
        {
            try
            {
                context.Entry(profileDb).State = EntityState.Modified;
                await context.SaveChangesAsync().ConfigureAwait(false);

                return(Result <UserProfileDb> .Ok(profileDb));
            }
            catch (DbUpdateConcurrencyException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Profile not deleted. {e.Message}"));
            }
            catch (DbUpdateException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Cannot save profile. Duplicate field. {e.Message}"));
            }
            catch (DbEntityValidationException e)
            {
                return(Result <UserProfileDb> .Fail <UserProfileDb>($"Invalid profile. {e.Message}"));
            }
        }
 public void Add(UserProfileDb profile)
 {
     context.Profiles.Add(profile);
     context.SearchCriterias.Add(profile.SearchCriteria);
     context.SaveChanges();
 }
 public void Delete(UserProfileDb profileDb)
 {
     context.SearchCriterias.Remove(context.SearchCriterias.Find(profileDb.SearchCriteria.Id));
     context.Profiles.Remove(profileDb);
     context.SaveChanges();
 }