internal List <List <object> > GenerateDbobj(IEnumerable <Type> Types) { List <List <object> > data = new List <List <object> >(); foreach (Type type in Types) { List <object> outrecord = new List <object>(); using (CHUMDB context = new CHUMDB()) { var records = context.Set(type); foreach (var record in records) { outrecord.Add(record); } } data.Add(outrecord); } return(data); }
private void CompareData(IEnumerable <object> fileData, IEnumerable <object> dbData) { Type RecordType = fileData.ElementAt(0).GetType(); System.Diagnostics.Debug.WriteLine("Distinct File Count: " + fileData.Count()); IEnumerable <PropertyInfo> KeyProperties = (from prop in RecordType.GetProperties() from att in prop.CustomAttributes where att.AttributeType == typeof(KeyAttribute) select prop); IEnumerable <PropertyInfo> PropertiesToChagne = from pro in RecordType.GetProperties() from not in KeyProperties where pro.Name != not.Name select pro; Stopwatch SW = new Stopwatch(); using (CHUMDB context = new CHUMDB()) { ILog Logger = ServiceLocator.Current.GetInstance <ILog>(); List <object> RangeAdd = new List <object>(); int count = 1; foreach (object fileRecord in fileData) { if ((count % 1000) == 0) { Logger.LogMessage("Processed: " + RecordType.Name + "\tRecord: " + count + "/" + fileData.Count() + " in: " + SW.ElapsedMilliseconds + " ms"); SW.Restart(); } //CHEKING db object Record = GetRecordFromDB(fileRecord, dbData); if (Record == null) { object[] Propvales = KeyProperties.Select(i => i.GetValue(fileRecord)).ToArray(); if (Propvales.Where(i => string.IsNullOrWhiteSpace(i.ToString())).Count() == 0) { RangeAdd.Add(fileRecord); } } else { object[] Propvales = KeyProperties.Select(i => i.GetValue(Record)).ToArray(); object DBRecord = context.Set(Record.GetType()).Find(Propvales); foreach (PropertyInfo prop in PropertiesToChagne) { if (prop.GetValue(DBRecord) != prop.GetValue(fileRecord)) { prop.SetValue(DBRecord, prop.GetValue(fileRecord)); } } } count++; } System.Diagnostics.Debug.WriteLine("Adding range data for: " + RecordType.Name); context.Set(RecordType).AddRange(RangeAdd); System.Diagnostics.Debug.WriteLine("Adding range data Done"); Logger.LogMessage("Saving Data"); Logger.LogMessage("Data Saved: " + context.SaveChanges()); } }