public async Task <SnippetOccurence> AddSnippetOccurenceAsync(Submission submission, Snippet snippet, int firstTokenIndex) { var foundSnippet = await GetOrAddSnippetAsync(snippet); var snippetOccurence = new SnippetOccurence { SubmissionId = submission.Id, Snippet = foundSnippet, FirstTokenIndex = firstTokenIndex, }; await db.SnippetsOccurences.AddAsync(snippetOccurence); await db.SaveChangesAsync(); var snippetStatistics = await GetOrAddSnippetStatisticsAsync(foundSnippet, submission.TaskId, submission.ClientId); snippetStatistics.AuthorsCount = await db.SnippetsOccurences.Include(o => o.Submission) .Where(o => o.SnippetId == foundSnippet.Id && o.Submission.ClientId == submission.ClientId && o.Submission.TaskId == submission.TaskId) .Select(o => o.Submission.AuthorId) .Distinct() .CountAsync(); await db.SaveChangesAsync(); return(snippetOccurence); }
public async Task <SnippetOccurence> AddSnippetOccurenceAsync(Submission submission, Snippet snippet, int firstTokenIndex) { logger.Information($"Сохраняю в базу информацию о сниппете {snippet} в решении #{submission.Id} в позиции {firstTokenIndex}"); logger.Information($"Ищу сниппет {snippet} в базе (или создаю новый)"); var foundSnippet = await GetOrAddSnippetAsync(snippet); logger.Information($"Сниппет в базе имеет номер {foundSnippet.Id}"); var snippetOccurence = new SnippetOccurence { SubmissionId = submission.Id, Snippet = foundSnippet, FirstTokenIndex = firstTokenIndex, }; logger.Information($"Добавляю в базу объект {snippetOccurence}"); DisableAutoDetectChanges(); /* ...and use non-async Add() here because of perfomance issues with async versions */ db.SnippetsOccurences.Add(snippetOccurence); db.Entry(snippetOccurence).State = EntityState.Added; await db.SaveChangesAsync(); db.Entry(snippetOccurence).State = EntityState.Unchanged; EnableAutoDetectChanges(); logger.Information($"Добавил. Пересчитываю статистику сниппета (количество авторов, у которых он встречается)"); var snippetStatistics = await GetOrAddSnippetStatisticsAsync(foundSnippet, submission.TaskId, submission.ClientId); DisableAutoDetectChanges(); logger.Information($"Старая статистика сниппета {foundSnippet}: {snippetStatistics}"); /* Use non-async Add() here because of perfomance issues with async versions */ snippetStatistics.AuthorsCount = db.SnippetsOccurences.Include(o => o.Submission) .Where(o => o.SnippetId == foundSnippet.Id && o.Submission.ClientId == submission.ClientId && o.Submission.TaskId == submission.TaskId) .Select(o => o.Submission.AuthorId) .Distinct() .Count(); db.Entry(snippetStatistics).State = EntityState.Modified; logger.Information($"Количество авторов, у которых встречается сниппет {foundSnippet} — {snippetStatistics.AuthorsCount}"); await db.SaveChangesAsync(); db.Entry(snippetStatistics).State = EntityState.Unchanged; EnableAutoDetectChanges(); logger.Information($"Закончил сохранение в базу информации о сниппете {foundSnippet} в решении #{submission.Id} в позиции {firstTokenIndex}"); return(snippetOccurence); }