使用Entity Framework从多对多关系中选择数据

时间:2018-10-19 15:26:48

标签: c# entity-framework mvvm many-to-many code-first

我有一个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数量。我已经使用与上面相同的代码编写了此代码,并且它确实有效。

1 个答案:

答案 0 :(得分:1)

明确使用Include来获取链接数据

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