コード例 #1
0
        public async Task <int> InsertQuestionnaireAsync(QuestionnaireSubmit model)
        {
            using var connection = new SqlConnection(_connectionString);
            await connection.OpenAsync();

            var questionnaireId = 0;

            using (var transaction = await connection.BeginTransactionAsync())
            {
                var insertQuestionnaire = @"INSERT INTO questionnaires (user_id, is_completed, last_updated)
                                            OUTPUT INSERTED.[id]
                                            VALUES (@userId, @isCompleted, @lastUpdated)";

                var insertQuestionnaireQuestion = @"INSERT INTO questionnaire_questions (questionnaire_id, question_group_id, question_id)
                                                    OUTPUT INSERTED.[id]
                                                    VALUES (@questionnaireId, @questionGroupId, @questionId)";


                var insertQuestionnaireAnswers = @"INSERT INTO questionnaire_answers (questionnaire_question_id, answer_id, answer_text)
                                                   OUTPUT INSERTED.[id]
                                                   VALUES (@questionnaireQuestionId, @answerId, @answerText)";


                questionnaireId = await connection.ExecuteScalarAsync <int>(insertQuestionnaire,
                                                                            new { userId = model.UserId, isCompleted = model.IsCompleted, lastUpdated = model.LastUpdated }, transaction);

                foreach (var qa in model.QuestionAnswers)
                {
                    var qustionnaireQuestionId = await connection.ExecuteScalarAsync <int>(insertQuestionnaireQuestion,
                                                                                           new { questionnaireId, questionGroupId = model.Id, questionId = qa.Id }, transaction);

                    foreach (var answer in qa.Answers)
                    {
                        await connection.ExecuteAsync(insertQuestionnaireAnswers,
                                                      new { questionnaireQuestionId = qustionnaireQuestionId, answerId = answer, answerText = default(string) }, transaction);
                    }

                    if (!string.IsNullOrWhiteSpace(qa.Text))
                    {
                        await connection.ExecuteAsync(insertQuestionnaireAnswers,
                                                      new { questionnaireQuestionId = qustionnaireQuestionId, answerId = default(int?), answerText = qa.Text }, transaction);
                    }
                }

                await transaction.CommitAsync();
            }

            return(questionnaireId);
        }
コード例 #2
0
        public async Task <int> SubmitAnswersAsync(QuestionnaireSubmission model)
        {
            var entity = new QuestionnaireSubmit
            {
                Id              = model.Id,
                UserId          = model.UserId,
                IsCompleted     = model.IsCompleted,
                LastUpdated     = DateTime.Now,
                QuestionAnswers = model.QuestionAnswers.Select(x => new QuestionnaireQuestionAnswer
                {
                    Id      = x.Id,
                    Text    = x.Text,
                    Answers = x.Answers
                }).ToList()
            };

            return(await _repository.InsertQuestionnaireAsync(entity));
        }