public SaveKpiTransformationLogResponse Save(SaveKpiTransformationLogRequest request) { try { var kpiTransformationLog = request.MapTo <KpiTransformationLog>(); var kpiTransformationSchedule = DataContext.KpiTransformationSchedules.Local.FirstOrDefault(x => x.Id == request.KpiTransformationScheduleId); if (kpiTransformationSchedule == null) { kpiTransformationSchedule = new KpiTransformationSchedule { Id = request.KpiTransformationScheduleId }; DataContext.KpiTransformationSchedules.Attach(kpiTransformationSchedule); } kpiTransformationLog.Schedule = kpiTransformationSchedule; var kpi = DataContext.Kpis.Local.FirstOrDefault(x => x.Id == request.KpiId); if (kpi == null) { kpi = new Kpi { Id = request.KpiId }; DataContext.Kpis.Attach(kpi); } kpiTransformationLog.Kpi = kpi; DataContext.KpiTransformationLogs.Add(kpiTransformationLog); //remove related kpi if error if (request.Status == Data.Enums.KpiTransformationStatus.Error && request.MethodId == 1 && request.NeedCleanRowWhenError) { var achievements = DataContext.KpiAchievements.Where( x => x.Kpi.Id == request.KpiId && x.Periode == request.Periode && x.PeriodeType == request.PeriodeType).ToList(); foreach (var achievement in achievements) { DataContext.KpiAchievements.Remove(achievement); } DataContext.SaveChanges(); } DataContext.SaveChanges(); return(new SaveKpiTransformationLogResponse { IsSuccess = true, Message = "You have been successfully saved kpi transformation log" }); } catch (Exception ex) { return(new SaveKpiTransformationLogResponse { IsSuccess = false, Message = "Error when saving kpi transformation log" + ex.Message }); } }