以下是我与实体框架一起使用的类层次结构的简化版本。
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; }
}
因此,调查问卷有一系列问题,每个问题都有自己的儿童问题集。
我面临的问题是,当我从数据库中检索问卷时,其所持问题的集合包括与该问卷相关的所有问题,包括嵌套在其他问题中的问题。
问题本身正确包含了对孩子问题的引用。
目前,我正在通过从Questions
Questionnaire.Questions
集合ParentQuestionId != null
删除所有Questionnaire.Questions
来解决此问题。
有没有办法告诉实体框架只包含Questions
ParentQuestionId
的空{{1}}?
答案 0 :(得分:3)
在您的控制器中:
Questionnaire questionnaire =
db.QuestionnaireDBSet
.Include(x => x.Questions.Where(q => q.ParentQuestionId == null))
.FirstOrDefault(x => x.Id == id);
假设db
是您的QuestionnaireDBContext ...
Questionnaire questionnaire =
db.QuestionnaireDBSet
.Include(x => x.Questions)
.Where(x => x.Questions.Any(q => q.ParentQuestionId == null))
.FirstOrDefault(x => x.Id == id);
我没有任何测试环境,所以我只能给你一些建议。