Выбор данных из отношения «многие ко многим» с Entity Framework - PullRequest
0 голосов
/ 19 октября 2018

У меня есть установка 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, что могло привести к сбою?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я пробовал тот же код, но с другого конца, а именно запрашивая каждый вопросв базе данных и подсчета количества тестов, к которым они принадлежат.Я написал это с кодом, идентичным приведенному выше, и это действительно работает.

1 Ответ

0 голосов
/ 19 октября 2018

Использование Include явно для получения связанных данных

context.Quizzes.Include(x=>x.Questionnaire).ThenInclude(x=>x.OthersThatYouNeed)......
...