public async Task ReplaceAllLearningDeliveriesForLearnerAsync(Guid learnerId, IEnumerable <LearningDelivery> learningDeliveries, CancellationToken cancellationToken) { // Done this as the OTB EF method to delete by anything other than PK would be slow. // If moving away from SQL Server, then should look at a more generic way of doing this await _dbContext.ExecuteSqlAsync("DELETE FROM LearningDelivery WHERE LearnerId = {0}", new object[] { learnerId }, cancellationToken); await _dbContext.LearningDeliveries.AddRangeAsync(learningDeliveries, cancellationToken); await _dbContext.CommitAsync(cancellationToken); }
public async Task <UpsertResult <Guid> > UpsertLearnerAsync(Learner learner, CancellationToken cancellationToken) { bool created; Guid key; var existingLearner = await _dbContext.Learners .Where(x => x.Ukprn == learner.Ukprn && x.LearnRefNumber == learner.LearnRefNumber) .SingleOrDefaultAsync(cancellationToken); if (existingLearner == null) { if (learner.Id == Guid.Empty) { learner.Id = new Guid(); } _dbContext.Learners.Add(learner); key = learner.Id; created = true; } else { existingLearner.UpdateFrom(learner); key = existingLearner.Id; created = false; } await _dbContext.CommitAsync(cancellationToken); return(new UpsertResult <Guid> { Created = created, Key = key, }); }
public async Task <bool> UpsertProviderAsync(FeProvider provider, CancellationToken cancellationToken) { bool created; var existingProvider = await _dbContext.FeProviders .Where(x => x.Ukprn == provider.Ukprn) .SingleOrDefaultAsync(cancellationToken); if (existingProvider == null) { _dbContext.FeProviders.Add(provider); created = true; } else { existingProvider.UpdateFrom(provider); created = false; } await _dbContext.CommitAsync(cancellationToken); return(created); }