Свойства дочерней таблицы не извлекаются в наследовании ядра ef

у меня есть следующие сущности..

    public class Paper
    {
        public int Id { get; set; }
        public string PaperCode { get; set; }
        ...
    }
    public class MCQPaper : Paper
    {
        public ICollection<MCQQuestion> Questions { get; set; }
    }
    public class MCQQuestion : Question
    {
        public int MCQPaperId { get; set; }
        public MCQPaper MCQPaper { get; set; }

        public int? MCQOptionId { get; set; }
        [ForeignKey("MCQOptionId")]
        public MCQOption TrueAnswer { get; set; }
        public ICollection<MCQOption> MCQOptions { get; set; }
    }
    public class MCQOption
    {
        public int Id { get; set; }
        public string OptionText { get; set; }
    }

и я пытаюсь получить MCQPaper на основе уникального кода бумаги, но он всегда дает мне пустую коллекцию вопросов.

вот мой запрос внутри репозитория..

        public MCQPaper GetByPaperCode(string paperCode)
        {
            var ans = AppDbContext.MCQPapers
                .Where(paper => paper.PaperCode.Equals(paperCode))
                //.Include(paper => paper.Questions)
                //    .ThenInclude(que => que.MCQOptions)
                .Include(paper => paper.Questions)
                    .ThenInclude(que => que.MCQPaper)
                //.Include(paper => paper.Questions)
                //    .ThenInclude(que => que.TrueAnswer)
                .FirstOrDefault();
            return ans;
        }

здесь я пробовал различные комбинации include() и theninclude(), но ни один из них не работает для меня

и, наконец, игнорировать грамматические ошибки, если таковые имеются

заранее спасибо


person Janak Vaghasiya    schedule 16.10.2020    source источник
comment
Вы пытались поставить куда после включения? удалите where и поместите свое условие в FirstOrDefaut() .FirstOrDefault(paper => paper.PaperCode.Equals(paperCode));   -  person puko    schedule 16.10.2020
comment
спасибо за предложение, я попробую и дам вам знать   -  person Janak Vaghasiya    schedule 16.10.2020
comment
@puko все еще не работает   -  person Janak Vaghasiya    schedule 16.10.2020
comment
вы уверены, что у вас есть какие-то вопросы, вставленные в базу данных? с правильным внешним ключом?   -  person puko    schedule 16.10.2020
comment
Прочтите эту статью learnentityframeworkcore.com/configuration/.   -  person puko    schedule 16.10.2020
comment
одна таблица на иерархию? или одна таблица на тип? Должен ли MCQOption иметь MCQQuestionId для FK? Поскольку между этими таблицами есть 2 FK, вам нужно явно определить оба FK?   -  person Jeremy Lakeman    schedule 16.10.2020
comment
@jeremy Я использовал одну таблицу для каждого столбца иерархии или дискриминатора.   -  person Janak Vaghasiya    schedule 16.10.2020
comment
@puko Я вставил данные в базу данных, используя два разных запроса в одной транзакции, как уже упоминалось здесь   -  person Janak Vaghasiya    schedule 16.10.2020


Ответы (1)


после того, как я бросил комментарии и поискал в Google, я нашел решение

используя два запроса, эту проблему можно решить, потому что здесь у меня есть циклическая зависимость между MCQQuestion и MCQOption

так что решение....

        public MCQPaper GetByPaperCode(string paperCode)
        {
            using var transaction = AppDbContext.Database.BeginTransaction();
            MCQPaper ans = new MCQPaper();
            try
            {
                ans = AppDbContext.MCQPapers
                .FirstOrDefault(paper => paper.PaperCode.Equals(paperCode));
                var questions = AppDbContext.MCQQuestions
                    .Include(que => que.MCQOptions)
                    .Where(que => que.MCQPaperId == ans.Id);
                ans.Questions = questions.ToList();
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
            }
            return ans;
        }
person Janak Vaghasiya    schedule 16.10.2020