public void Save_Point_Measure_Fact_Service(IList <RawDataDTO> list_raw_data_dto, ElementDTO element) { try { DatawarehouseConnectionContext datawarehousecontext = new DatawarehouseConnectionContext(); Point_Measure_Fact point_measure_fact; foreach (RawDataDTO raw_dto in list_raw_data_dto) { point_measure_fact = new Point_Measure_Fact(); try { point_measure_fact.ID = 1; point_measure_fact.Client_ID = 0; point_measure_fact.DataRecordingFrequency = element.Recorded_Freq; point_measure_fact.Date_ID = System.DateTime.Now.Date; point_measure_fact.External_ID = raw_dto.ID.ToString(); point_measure_fact.Hour_ID = System.DateTime.Now.Date; point_measure_fact.Last_Update_Time = System.DateTime.Now; point_measure_fact.Max_Value = element.Max_Value; point_measure_fact.Min_Value = element.Min_Value; point_measure_fact.Point_ID = element.ID; point_measure_fact.Schedule_ID = 0; point_measure_fact.Timestamp_From = Convert.ToDateTime(raw_dto.TIMESTAMP); point_measure_fact.Timestamp_To = Convert.ToDateTime(raw_dto.TIMESTAMP); point_measure_fact.Unit_Of_Measurement = element.Unit.Unit_Name; point_measure_fact.Value = Convert.ToDouble(raw_dto.VALUE); datawarehousecontext.Point_Measure_Fact_Entities.Add(point_measure_fact); } catch (Exception ex) { throw ex; } } datawarehousecontext.SaveChanges(); } catch (Exception ex) { throw ex; } //datawarehousecontext.Point_Measure_Fact_Entities.Add() }
/// <summary> /// Datawarehouse finalinsert into the Point_Mesaure_Fact /// </summary> /// <param name="point_measure_facts"></param> private static void FinalInsert(IList <Point_Measure_Fact> point_measure_facts) { try { BlockingCollection <Point_Measure_Fact> entityQueue = new BlockingCollection <Point_Measure_Fact>(); List <Task> writers = new List <Task>(); if (point_measure_facts.Count > 0) { Action writerAction = new Action(() => { DatawarehouseConnectionContext ctx = new DatawarehouseConnectionContext(); ctx.Database.CommandTimeout = 300; int totalAdded = 0; try { while (true) { Point_Measure_Fact my = entityQueue.Take(); my.Last_Update_Time = System.DateTime.Now; ctx.Point_Measure_Fact_Entities.Add(my); totalAdded++; if (totalAdded > 500) { //Console.WriteLine("Saving changes, TID: " + Thread.CurrentThread.ManagedThreadId); try { ctx.SaveChanges(); } catch (Exception ex) { Helper.WriteToFile("Error in saving: " + ex.InnerException.Message); } ctx.Database.Connection.Close(); ctx = new DatawarehouseConnectionContext(); } } } catch (InvalidOperationException inv) { //WriteToFile("Saving final changes --- " + inv.Message); //Console.WriteLine("Saving final changes, TID: " + Thread.CurrentThread.ManagedThreadId); // Console.WriteLine("Error Saving final " + inv.Message); ctx.SaveChanges(); // Save any pending changes ctx.Database.Connection.Close(); totalAdded = 0; } }); for (int i = 0; i < 1000; i++) { writers.Add(Task.Factory.StartNew(writerAction)); } foreach (Point_Measure_Fact point_measure_fact in point_measure_facts) { entityQueue.Add(point_measure_fact); } } entityQueue.CompleteAdding(); //Console.WriteLine("Done generating data."); Task.WaitAll(writers.ToArray()); Console.WriteLine("Finished"); } catch (Exception ex) { string innerexp = (ex.InnerException != null) ? ex.InnerException.Message : ""; Helper.WriteToFile("Error in the FinalInsert " + ex.Message + "--" + innerexp); Console.Write("Done with errors Press any key"); Console.ReadKey(); } }