我有一个Code First EF设置,在Quiz和Question两个类之间具有多对多关系。他们看起来像这样:
public partial class Quiz
{
public Quiz()
{
Questionnaire = new HashSet<Question>();
}
[Key]
public int Id { get; set; }
[Required]
public string Naam { get; set; }
public ICollection<Question> Questionnaire{ get; set; }
}
public partial class Question
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Question()
{
Quizzes = new HashSet<Quiz>();
Answers = new HashSet<Answer>();
}
[Key]
public int Id { get; set; }
[Column(TypeName = "ntext")]
[Required]
public string Content { get; set; }
public int CategoryId { get; set; }
public virtual ICollection<Quiz> Quizzes { get; set; }
public virtual ICollection<Answer> Answers { get; set; }
public virtual Category Category { get; set; }
}
我已经在数据库中确认EF正确设置了链接表QuizQuestions,并且种子数据似乎也正确填充了。
现在是问题所在。我有一个ViewModel类,它试图读取数据库中的所有测验并添加链接到每个测验的问题数量。问题是“ Questionnaire”属性没有填写,我不知道为什么。 ViewModel使用以下代码:
using (var context = new KwisContext())
{
var quizzes = context.Quizzes.ToList().Select(q => new QuizVM(q));
Quizzes = new ObservableCollection<QuizVM>(quizzes);
}
QuizVM看起来像这样:
public class QuizVM
{
private Quiz _q;
public QuizVM(Quiz q)
{
_q = q;
}
public string Naam
{
get { return _q.Naam; }
}
public int QuestionCount
{
get {
return _q.Questionnaire.Count;
}
}
}
我已经将我的代码与尝试做类似事情的人(这是用于大学)进行了比较,但是它与他的代码一起工作,而不与我的代码一起工作,而且我一生都无法看到我们方法的不同。在实体框架中是否有我可能搞砸的事情,可能会导致失败?
编辑: 我忘了提起我尝试过相同的代码,但从另一端开始,即请求数据库中的每个Question并计算它们所属的Quizz数量。我已经使用与上面相同的代码编写了此代码,并且它确实有效。
答案 0 :(得分:1)
明确使用Include
来获取链接数据
context.Quizzes.Include(x=>x.Questionnaire).ThenInclude(x=>x.OthersThatYouNeed)......