private IQueryable <T> GetSlideCheckingsByUsers <T>(string courseId, Guid slideId, IEnumerable <string> userIds, bool noTracking = true) where T : AbstractSlideChecking { IQueryable <T> dbRef = db.Set <T>(); if (noTracking) { dbRef = dbRef.AsNoTracking(); } var items = dbRef.Where(c => c.CourseId == courseId && c.SlideId == slideId && userIds.Contains(c.UserId)); return(items); }
private IEnumerable <T> GetSlideCheckingsByUser <T>(string courseId, Guid slideId, string userId, bool noTracking = true) where T : AbstractSlideChecking { IQueryable <T> dbRef = db.Set <T>(); if (noTracking) { dbRef = dbRef.AsNoTracking(); } var items = dbRef.Where(c => c.CourseId == courseId && c.SlideId == slideId && c.UserId == userId).ToList(); return(items); }
public async Task RemoveWaitingManualCheckings <T>(string courseId, Guid slideId, string userId, bool startTransaction = true) where T : AbstractManualSlideChecking { using (var transaction = startTransaction ? db.Database.BeginTransaction() : null) { var checkings = (await GetSlideCheckingsByUser <T>(courseId, slideId, userId) .ToListAsync()) .Where(c => !c.IsChecked && !c.IsLocked) .ToList(); foreach (var checking in checkings) { checking.PreRemove(db); db.Set <T>().Remove(checking); } await db.SaveChangesAsync(); if (transaction != null) { await transaction.CommitAsync(); } } }
public override void PreRemove(UlearnDb db) { db.Set <ExerciseCodeReview>().RemoveRange(Reviews); }