public UpdateKpiResponse Update(UpdateKpiRequest request) { var response = new UpdateKpiResponse(); try { var updateKpi = request.MapTo<Kpi>(); if (request.PillarId.HasValue) { updateKpi.Pillar = DataContext.Pillars.FirstOrDefault(x => x.Id == request.PillarId); } if (request.GroupId.HasValue) { updateKpi.Group = DataContext.Groups.FirstOrDefault(x => x.Id == request.GroupId); } if (request.RoleGroupId.HasValue) { updateKpi.RoleGroup = DataContext.RoleGroups.FirstOrDefault(x => x.Id == request.RoleGroupId.Value); } updateKpi.Measurement = DataContext.Measurements.Single(x => x.Id == request.MeasurementId); updateKpi.Level = DataContext.Levels.FirstOrDefault(x => x.Id == request.LevelId); updateKpi.Type = DataContext.Types.FirstOrDefault(x => x.Id == request.TypeId); updateKpi.Method = DataContext.Methods.FirstOrDefault(x => x.Id == request.MethodId); var existedkpi = DataContext.Kpis .Where(x => x.Id == request.Id) .Include(x => x.RelationModels.Select(y => y.Kpi)) .Include(x => x.RelationModels.Select(y => y.KpiParent)) .Include(x => x.Pillar) .Include(x => x.Level) .Include(x => x.RoleGroup) .Include(x => x.Group) .Include(x => x.Type) .Include(x => x.Measurement) .Include(x => x.Method) .Single(); DataContext.Entry(existedkpi).CurrentValues.SetValues(updateKpi); if (updateKpi.Group != null) { DataContext.Groups.Attach(updateKpi.Group); existedkpi.Group = updateKpi.Group; } if (updateKpi.RoleGroup != null) { DataContext.RoleGroups.Attach(updateKpi.RoleGroup); existedkpi.RoleGroup = updateKpi.RoleGroup; } if (updateKpi.Pillar != null) { DataContext.Pillars.Attach(updateKpi.Pillar); existedkpi.Pillar = updateKpi.Pillar; } DataContext.Measurements.Attach(updateKpi.Measurement); existedkpi.Measurement = updateKpi.Measurement; DataContext.Levels.Attach(updateKpi.Level); existedkpi.Level = updateKpi.Level; DataContext.Types.Attach(updateKpi.Type); existedkpi.Type = updateKpi.Type; DataContext.Methods.Attach(updateKpi.Method); existedkpi.Method = updateKpi.Method; var joinedRelationModels = existedkpi.RelationModels.ToList(); var additionalRelationModels = DataContext.KpiRelationModels .Include(x => x.Kpi) .Include(x => x.KpiParent) .Where(x => x.Kpi.Id == request.Id).ToList(); foreach (var item in additionalRelationModels) { joinedRelationModels.Add(item); } foreach (var joinedRelationModel in joinedRelationModels) { DataContext.KpiRelationModels.Remove(joinedRelationModel); } if (request.RelationModels.Count > 0) { var relation = new List<KpiRelationModel>(); foreach (var item in request.RelationModels) { if (item.KpiId != 0) { var kpiRelation = DataContext.Kpis.FirstOrDefault(x => x.Id == item.KpiId); relation.Add(new KpiRelationModel { Kpi = kpiRelation, Method = item.Method }); } } existedkpi.RelationModels = relation; } DataContext.SaveChanges(); response.IsSuccess = true; response.Message = "KPI item has been updated successfully"; } catch (DbUpdateException dbUpdateException) { response.Message = dbUpdateException.Message; } return response; }
public UpdateKpiResponse Update(UpdateKpiRequest request) { var response = new UpdateKpiResponse(); try { var action = request.MapTo <BaseAction>(); var updateKpi = request.MapTo <Kpi>(); if (request.PillarId.HasValue) { updateKpi.Pillar = DataContext.Pillars.FirstOrDefault(x => x.Id == request.PillarId); } if (request.GroupId.HasValue) { updateKpi.Group = DataContext.Groups.FirstOrDefault(x => x.Id == request.GroupId); } if (request.RoleGroupId.HasValue) { updateKpi.RoleGroup = DataContext.RoleGroups.FirstOrDefault(x => x.Id == request.RoleGroupId.Value); } updateKpi.Measurement = DataContext.Measurements.Single(x => x.Id == request.MeasurementId); updateKpi.Level = DataContext.Levels.FirstOrDefault(x => x.Id == request.LevelId); updateKpi.Type = DataContext.Types.FirstOrDefault(x => x.Id == request.TypeId); updateKpi.Method = DataContext.Methods.FirstOrDefault(x => x.Id == request.MethodId); updateKpi.UpdatedBy = DataContext.Users.FirstOrDefault(x => x.Id == request.UserId); var existedkpi = DataContext.Kpis .Where(x => x.Id == request.Id) .Include(x => x.RelationModels.Select(y => y.Kpi)) .Include(x => x.RelationModels.Select(y => y.KpiParent)) .Include(x => x.Pillar) .Include(x => x.Level) .Include(x => x.RoleGroup) .Include(x => x.Group) .Include(x => x.Type) .Include(x => x.Measurement) .Include(x => x.Method) .Single(); DataContext.Entry(existedkpi).CurrentValues.SetValues(updateKpi); if (updateKpi.Group != null) { DataContext.Groups.Attach(updateKpi.Group); existedkpi.Group = updateKpi.Group; } if (updateKpi.RoleGroup != null) { DataContext.RoleGroups.Attach(updateKpi.RoleGroup); existedkpi.RoleGroup = updateKpi.RoleGroup; } if (updateKpi.Pillar != null) { DataContext.Pillars.Attach(updateKpi.Pillar); existedkpi.Pillar = updateKpi.Pillar; } DataContext.Measurements.Attach(updateKpi.Measurement); existedkpi.Measurement = updateKpi.Measurement; DataContext.Levels.Attach(updateKpi.Level); existedkpi.Level = updateKpi.Level; DataContext.Types.Attach(updateKpi.Type); existedkpi.Type = updateKpi.Type; DataContext.Methods.Attach(updateKpi.Method); existedkpi.Method = updateKpi.Method; var joinedRelationModels = existedkpi.RelationModels.ToList(); var additionalRelationModels = DataContext.KpiRelationModels .Include(x => x.Kpi) .Include(x => x.KpiParent) .Where(x => x.Kpi.Id == request.Id).ToList(); foreach (var item in additionalRelationModels) { joinedRelationModels.Add(item); } foreach (var joinedRelationModel in joinedRelationModels) { DataContext.KpiRelationModels.Remove(joinedRelationModel); } if (request.RelationModels.Count > 0) { var relation = new List <KpiRelationModel>(); foreach (var item in request.RelationModels) { if (item.KpiId != 0) { var kpiRelation = DataContext.Kpis.FirstOrDefault(x => x.Id == item.KpiId); relation.Add(new KpiRelationModel { Kpi = kpiRelation, Method = item.Method }); } } existedkpi.RelationModels = relation; } DataContext.SaveChanges(action); response.IsSuccess = true; response.Message = "KPI item has been updated successfully"; } catch (DbUpdateException dbUpdateException) { response.Message = dbUpdateException.Message; } return(response); }