public static void ApplyUpdate(this Control dataItem, Contracts.Control.UpdateControl update, RAAPEntities db)
        {
            dataItem.Name              = update.Name;
            dataItem.Description       = update.Description;
            dataItem.UpdatedOn         = DateTime.Now;
            dataItem.ExecutedDate      = update.ExecutedDate;
            dataItem.Deadline          = update.Deadline;
            dataItem.InvestmentCost    = update.InvestmentCost;
            dataItem.LegalObligation   = update.LegalObligation;
            dataItem.MaintenanceCost   = update.MaintenanceCost;
            dataItem.ResponsibleUserId = update.ResponsibleUserId;
            dataItem.Status            = (int)update.Status;
            dataItem.Type              = (int)update.Type;
            dataItem.ValidTo           = update.ValidTo;
            dataItem.ControlCategory   =
                db.ControlCategories.FirstOrDefault(c => c.ControlCategoryId == update.Category.ControlCategoryId);
            dataItem.React       = update.React;
            dataItem.Detect      = update.Detect;
            dataItem.Avoid       = update.Avoid;
            dataItem.Prevent     = update.Prevent;
            dataItem.AlertUserId = update.AlertUserId;
            dataItem.AlertDate   = update.AlertDate;
            update.Evaluations.Where(e => e.EvaluationId == 0 && !string.IsNullOrEmpty(e.Text)).OrderBy(e => e.Revision)
            .ForEach(e => dataItem.HtmlComments.Add(e.ToDataModel(db, dataItem)));
            //Remove deleted
            var itemsForDelete = dataItem.ControlRisks.Where(r => update.Risks.All(rr => rr.RiskReduceId != r.ControlRiskId)).ToList();

            itemsForDelete.ForEach(r => dataItem.ControlRisks.Remove(r));
            //Update existing
            update.Risks.Where(r => r.RiskReduceId > 0).ForEach(risk =>
                                                                dataItem.ControlRisks.First(r => r.ControlRiskId == risk.RiskReduceId).UpdateFrom(risk));
            //Add new
            update.Risks.Where(r => r.RiskReduceId <= 0).ForEach(risk => dataItem.ControlRisks.Add(risk.ToDataModel()));
        }
 public Contracts.Control.Control Update(Contracts.Control.UpdateControl updateControl)
 {
     using (var db = new RAAPEntities(GetConnectionString()))
     {
         var process = db.Controls.FirstOrDefault(a => a.ControlId == updateControl.ControlId);
         if (process == null)
         {
             throw new RAAPNotFoundException("Item not found.");
         }
         RiskCalculator.CheckRiskTypes(updateControl, db);
         process.ApplyUpdate(updateControl, db);
         db.SaveChanges();
         return(process.ToContract(_userService));
     }
 }