private void UpdateSingleItemOptionChoices(CaseReportFormPatientResult singleItemResult,
                                                   CaseReportFormPatientResult dbItemResult)
        {
            var dbOptionChoicesIds = dbItemResult.Options
                                     .Select(o => o.CaseReportFormOptionChoiceId.ToString())
                                     .ToList();

            var formOptionChoicesIds = new List <string>();

            if (singleItemResult.SelectedId != null && singleItemResult.SelectedIds != null)
            {
                return;
            }
            if (singleItemResult.SelectedId != null)
            {
                formOptionChoicesIds.Add(singleItemResult.SelectedId.ToString());
            }
            if (singleItemResult.SelectedIds != null)
            {
                var selectedIds = singleItemResult.SelectedIds.Select(i => i.ToString()).ToList();
                formOptionChoicesIds.AddRange(selectedIds);
            }

            var toDeleteOptionIds = dbOptionChoicesIds.Except(formOptionChoicesIds);
            var toInsertOptionIds = formOptionChoicesIds.Except(dbOptionChoicesIds);

            if (toDeleteOptionIds.Count() > 0)
            {
                var toDelOptions = _context.CaseReportFormPatientResultOptionChoices
                                   .Where(o => toDeleteOptionIds.Contains(o.CaseReportFormOptionChoiceId.ToString()) &&
                                          o.CaseReportFormPatientResultId == dbItemResult.ID);
                if (toDelOptions != null)
                {
                    _context.CaseReportFormPatientResultOptionChoices.RemoveRange(toDelOptions);
                    _context.Entry(dbItemResult).State = EntityState.Modified;
                }
            }
            if (toInsertOptionIds.Count() > 0)
            {
                foreach (string id in toInsertOptionIds)
                {
                    var optionChoice = CreateOptionChoiceForResult(_context, Int32.Parse(id));
                    optionChoice.CaseReportFormPatientResultId = dbItemResult.ID;
                    dbItemResult.Options.Add(optionChoice);
                    _context.CaseReportFormPatientResultOptionChoices.Add(optionChoice);
                    _context.Entry(dbItemResult).State = EntityState.Modified;
                }
            }
        }
        private void UpdateItemResultInDatabase(Patient patientToUpdate,
                                                CaseReportFormResult caseReportFormResult,
                                                CaseReportFormPatientResult formSingleItemResult)
        {
            var dbItemResult = _context.CaseReportFormPatientResults
                               .Where(pr => pr.PatientId == patientToUpdate.ID &&
                                      pr.CaseReportFormFieldId == formSingleItemResult.CaseReportFormFieldId &&
                                      pr.CaseReportFormId == caseReportFormResult.CaseReportFormId &&
                                      pr.CaseReportFormResultId == caseReportFormResult.ID)
                               .FirstOrDefault();

            if (dbItemResult != null)
            {
                UpdateSingleDbItem(caseReportFormResult, formSingleItemResult, dbItemResult);
            }
        }
        private void UpdateSingleDbItem(CaseReportFormResult caseReportFormResult,
                                        CaseReportFormPatientResult updatedResult,
                                        CaseReportFormPatientResult existingDbItemResult)
        {
            existingDbItemResult.CaseReportFormFieldId  = updatedResult.CaseReportFormFieldId;
            existingDbItemResult.CaseReportFormResultId = caseReportFormResult.ID;
            existingDbItemResult.NumericAnswer          = updatedResult.NumericAnswer;
            existingDbItemResult.TextAnswer             = updatedResult.TextAnswer;
            existingDbItemResult.SelectedId             = updatedResult.SelectedId;
            existingDbItemResult.SelectedIds            = updatedResult.SelectedIds;
            existingDbItemResult.DateAnswer             = updatedResult.DateAnswer;

            _context.Entry(existingDbItemResult).Collection(c => c.Options).Load();

            UpdateSingleItemOptionChoices(updatedResult, existingDbItemResult);
            _context.Update(existingDbItemResult);
            LockForm(updatedResult.CaseReportFormId);
        }