簡體   English   中英

實體框架6-處理嵌套對象的加載

[英]Entity Framework 6 - Handling loading of nested objects

這是我與實體框架一起使用的類層次結構的簡化版本。

public class Questionnaire
{
   public int Id { get; set; }
   public ICollection<Question> Questions { get; set; }
}

public class Question
{
   public int Id { get; set; }
   public ICollection<Question> ChildQuestions { get; set; }

   // Navigation properties
   public int QuestionnaireId { get; set; }
   public virtual Questionnaire Questionnaire { get; set; }
   public int? ParentQuestionId { get; set; }
   public virtual Question ParentQuestion { get; set; }
}

因此,調查表包含一個問題集合,每個問題可以具有自己的子問題集合。

我面臨的問題是,當我從數據庫中檢索調查表時,它所持有的問題集合包括與該調查表相關的所有問題,包括嵌套在其他問題中的問題。

問題本身正確地包含對其子問題的引用。

目前,我正在通過從Questionnaire.Questions集合中ParentQuestionId != null其中ParentQuestionId != null所有Questions來解決此Questionnaire.Questions

有沒有告訴實體框架僅包括在一個方式Questionnaire.QuestionsQuestions其中有一個空ParentQuestionId

在您的控制器中:

Questionnaire questionnaire = 
    db.QuestionnaireDBSet
      .Include(x => x.Questions.Where(q => q.ParentQuestionId == null))
      .FirstOrDefault(x => x.Id == id);

假設db是您的QuestionnaireDBContext ...

編輯:正如OP所說,似乎我們無法使用Include進行過濾。 因此,以上答案僅在完美世界中有效。 但是現在您應該嘗試這樣的事情:

Questionnaire questionnaire = 
    db.QuestionnaireDBSet
      .Include(x => x.Questions)
      .Where(x => x.Questions.Any(q => q.ParentQuestionId == null))
      .FirstOrDefault(x => x.Id == id);

我沒有任何測試環境,所以我只能給您一些建議。

暫無
暫無

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

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