private bool SaveSentence(string sentenceText, List <Word> words) { //TODO: в случае неудачи - убирать за собой foreach (ParsedWord word in words) { string wordText = word.GetAppropriateWordText(); long wordId = SaveWords(word, wordText); if (IdValidator.IsInvalid(wordId)) { //не сохранять предложение, т.к. не все слова сохранены return(false); } } //TODO: поискать предложение с такими же словами, если есть, то не добавлять //сохранить предложение long sentenceId = _sentencesQuery.GetOrCreate(_languageId, sentenceText); if (IdValidator.IsInvalid(sentenceId)) { return(false); } bool result = true; int orderInSentence = 1; foreach (ParsedWord word in words) { long wordId; string wordText = word.GetAppropriateWordText(); if (!_wordsIdsByText.TryGetValue(wordText, out wordId)) { LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat( "TextProcessor.SaveSentence не удалось найти идентификатор для слова {0}, предложение {1}(идентификатор {2})!", wordText, sentenceId, sentenceText); result = false; break; } string originalText = word.Text; if (!_sentenceWordsQuery.CreateOrUpdate(sentenceId, wordId, originalText, orderInSentence, word.Type)) { LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat( "TextProcessor.SaveSentence не удалось сохранить слово {0}(идентификатор {1}) для предложения {2}(идентификатор {3})!", originalText, wordId, sentenceText, sentenceId); } orderInSentence++; } if (!_sentenceWordsQuery.DeleteGreaterOrEqualsOrderWords(sentenceId, orderInSentence)) { LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat( "TextProcessor.SaveSentence не удалось удалить слова для предложения {0}(идентификатор {1}), у которых порядковый номер больше или равен {2}!", sentenceText, sentenceId, orderInSentence); } return(result); }
private bool CreateExamples(IEnumerable <ComparisonRuleExampleForUser> ruleExamples, ComparisonRuleForUser newComparisonRuleForUser, StudyLanguageContext c) { bool result = true; int orderRuleExample = 1; foreach (ComparisonRuleExampleForUser ruleExample in ruleExamples) { SourceWithTranslation example = ruleExample.Example; SourceWithTranslation sentenceWithTranslation = _sentencesQuery.GetOrCreate(SentenceType.ComparisonExample, example.Source, example.Translation, null); long sentenceTranslationId = sentenceWithTranslation.Id; if (IdValidator.IsInvalid(sentenceTranslationId)) { LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat( "ComparisonsQuery.GetOrCreate не удалось создать предложения примера! " + "Предложение: {0}, перевод предложения {1}", sentenceWithTranslation.Source.Text, sentenceWithTranslation.Translation.Text); result = false; continue; } long ruleId = newComparisonRuleForUser.Id; ComparisonRuleExample comparisonRuleExample = GetOrCreateComparisonRuleExample(ruleId, sentenceTranslationId, ruleExample.Description, orderRuleExample++, c); if (IdValidator.IsInvalid(comparisonRuleExample.Id)) { LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat( "ComparisonsQuery.GetOrCreate не удалось создать пример для правила сравнения! " + "Id примера: {0}, sentenceWithTranslationId {1}", ruleId, sentenceTranslationId); result = false; continue; } var exampleForUser = new ComparisonRuleExampleForUser(comparisonRuleExample, sentenceWithTranslation); newComparisonRuleForUser.AddExample(exampleForUser); } return(result); }