Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
            }
        }