Beispiel #1
0
 public void PurgeAllStoredAudits()
 {
     lock (SyncRoot)
     {
         using (var ctx = new Model.CTCBAStorageContext())
         {
             ctx.Database.ExecuteSqlCommand(
                 "delete from UnusedCourses", new object[0]);
             ctx.Database.ExecuteSqlCommand(
                 "delete from StudentAudits", new object[0]);
             ctx.Database.ExecuteSqlCommand(
                 "DBCC CHECKIDENT (UnusedCourses, reseed, 0)",
                 new object[0]);
             ctx.Database.ExecuteSqlCommand(
                 "DBCC CHECKIDENT (StudentAudits, reseed, 0)",
                 new object[0]);
         }
     }
 }
Beispiel #2
0
        public void MergeAudits(CTCBAParser.IBatchAudit[] auditsToMerge)
        {
            if (auditsToMerge == null || auditsToMerge.Length < 1)
            {
                return;
            }

            lock (SyncRoot)
            {
                //get the min and max timestamp from the auditsToMerge set.
                //use the min/max timestamp to retrieve records that might have a collision with the incoming data.
                DateTime minTS, maxTS;
                DetermineMinMax(auditsToMerge, out minTS, out maxTS);

                using (var ctx = new Model.CTCBAStorageContext())
                {
                    var q_potential_colliders =
                        from x in ctx.StudentAudits
                        where x.AuditTimestamp <= maxTS && x.AuditTimestamp >= minTS
                        select new //only fields used for collision detection.
                    {
                        x.StudentId,
                        x.AuditTimestamp,
                        x.ProgramCode
                    };

                    //determine which audits to merge.
                    var q_to_merge =
                        from a in auditsToMerge
                        join c in q_potential_colliders
                        on new { A = a.AuditTimestamp, B = a.ProgramCode, C = a.StudentID }
                    equals new { A = c.AuditTimestamp, B = c.ProgramCode, C = c.StudentId } into j_c
                    from c in j_c.DefaultIfEmpty()
                    select new
                    {
                        a,
                        Collided = c != null
                    };

                    Model.StudentAudit saEntity = null;
                    Model.UnusedCourse ucEntity = null;
                    Console.Write("Total audits in batch: ");
                    Console.WriteLine(auditsToMerge.Count().ToString());

                    var mergeBatch = q_to_merge.Where(z => z.Collided == false);
                    Console.Write("Total audits to be merged: ");
                    Console.WriteLine(mergeBatch.Count().ToString());

                    //attempt to speedup saving to database. (Seems to work, JMC 2013-04-08)
                    ctx.Configuration.AutoDetectChangesEnabled = false;
                    ctx.Configuration.ValidateOnSaveEnabled    = false;

                    foreach (var item in mergeBatch)
                    {
                        saEntity = new Model.StudentAudit()
                        {
                            AuditText       = item.a.AuditText,
                            AuditTimestamp  = item.a.AuditTimestamp,
                            CreditsApplied  = item.a.CreditsApplied,
                            CreditsRequired = item.a.CreditsRequired,
                            DegreeTitle     = item.a.DegreeTitle,
                            ProgramCode     = item.a.ProgramCode,
                            StudentId       = item.a.StudentID,
                            MyUnusedCourses = new List <Model.UnusedCourse>(),
                        };

                        foreach (var uc in item.a.UnusedCourses)
                        {
                            ucEntity = new Model.UnusedCourse()
                            {
                                CourseId        = uc.CourseID,
                                CourseStatus    = uc.CourseStatus,
                                CourseTitle     = uc.CourseTitle,
                                CTCYrq          = uc.CTCYrq,
                                EnrolledCredits = uc.EnrolledCredits,
                                LetterGrade     = uc.LetterGrade,
                                QuarterLabel    = uc.QuarterLabel,
                            };
                            saEntity.MyUnusedCourses.Add(ucEntity);
                        }

                        ctx.StudentAudits.Add(saEntity);
                    }
                    ctx.SaveChanges();
                }
            }
        }