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]); } } }
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(); } } }