У меня есть установка Code First EF с отношением «многие ко многим» между двумя классами, Викториной и Вопросом.Они выглядят так:
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, который пытается прочитать все тесты в базе данных и добавить количество вопросов, связанных с каждым.Проблема в том, что свойство «Анкета» не заполняется, и я не могу понять, почему.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;
}
}
}
Я сравнил свой код с кем-то, пытающимся сделать что-то подобное (это для колледжа), ноон работает с его кодом, а не с моим, и я не могу понять разницу в нашем подходе.Есть ли что-то, что я мог облажаться в Entity Framework, что могло привести к сбою?
РЕДАКТИРОВАТЬ: я забыл упомянуть, что я пробовал тот же код, но с другого конца, а именно запрашивая каждый вопросв базе данных и подсчета количества тестов, к которым они принадлежат.Я написал это с кодом, идентичным приведенному выше, и это действительно работает.