[英]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.Questions
的Questions
其中有一個空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.