簡體   English   中英

子表屬性未在 ef 核心繼承中獲取

[英]Child Table Properties are not fetching in ef core inheritance

我有以下實體..

    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; }
    }

我正在嘗試根據唯一的 papercode 獲取 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() 的各種組合,但沒有一個對我有用

最后忽略語法錯誤(如果有的話)

先感謝您

在發表評論並在谷歌上搜索后,我找到了解決方案

使用兩個查詢可以解決這個問題,因為這里我在MCQQuestionMCQOption之間有循環依賴

所以解決方案是......

        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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM