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)); } }