public async Task <ActionResult> AssignMolecule(AssignMoleculeViewModel model,
                                                        IList <AssignValueViewModel> assignValueViewModels)
        {
            var validationResult = new ValidationResultList();

            model.AssignMolecules = assignValueViewModels;

            if (ModelState.IsValid)
            {
                try
                {
                    if (assignValueViewModels == null || string.IsNullOrEmpty(model.EssentialOilId))
                    {
                        Log.Error("AssignMolecule. An unexpected error occurred. Value is null.");
                        throw new ArgumentNullException(Resources.Resources.Error_UnexpectedError);
                    }

                    // Delete all assigned molecules from database in order to update.
                    validationResult =
                        await _essentialOilMoleculeService.DeleteAssignedMoleculesAsync(model.EssentialOilId);

                    // Insert assigned molecules if deletion was successful.
                    if (!validationResult.HasErrors)
                    {
                        foreach (var assignValueViewModel in assignValueViewModels)
                        {
                            // Insert the assigned molecules in database.
                            validationResult = await AssignMoleculeToEssentialOil(model, assignValueViewModel);
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Error($"AssignMolecule. An unexpected error occurred while inserting or editing: {e}");
                    throw;
                }
            }

            // Show validation result, if validation error occurred while
            // inserting or if ModelState is invalid.
            if (validationResult.HasErrors || !ModelState.IsValid)
            {
                AddGeneralModelStateError(validationResult);

                AddValidationResultsToModelStateErrors(validationResult.Errors);

                // Set substances to display in list.
                var substances = await _substanceService.GetAllAsync(new SubstanceFilter());

                model.Substances = substances;

                Log.Info("Show AssignMolecule");
                return(View(nameof(AssignMolecule), model));
            }

            Log.Info("Redirect to AssignEffect");
            return(RedirectToAction(nameof(AssignEffect), new { id = model.EssentialOilId }));
        }