2

私は Entity Framework を使用しています。クラスとクラスの子からデータを取得する方法を知りたいです。これが私のセットアップです:

 public class Question
 {
    public Question()
    {
        this.Answers = new List<Answer>();
    } 
    public int QuestionId { get; set; }
    ...
    ...
    public string Title { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

public class Answer
{
    public int AnswerId { get; set; }
    public string Text { get; set; }
    public int QuestionId { get; set; }
    public virtual Question Question { get; set; }
}

他のすべてのクラスに遅延読み込みを使用したくないため、次のように設定しました。

DbContext.Configuration.LazyLoadingEnabled = false;

現在使用しているコードは次のとおりです。

    public IList<Question> GetQuestions(int subTopicId, int questionStatusId)
    {
        var questions = _questionsRepository.GetAll()
            .Where(a => a.SubTopicId == subTopicId &&
                        a.QuestionStatusId == questionStatusId)
            .ToList();
        return questions; 
    }

私のリポジトリは次のようになります。

    public virtual IQueryable<T> GetAll()
    {
        return DbSet;
    }
4

2 に答える 2

3

を使用.Include()して複数のレベルを積極的にロードするか、またはDbQueryを呼び出して明示的に遅延ロードを行うことができます。.Load()DbEntityEntry.CollectionDbEntityEntry.Reference

context.MyParentEntities.Include(x=>x.ChildEntities); //eager load

//explicit collection property lazy load
context.Entry(MyEntity).Collection(x=>x.ChildEntities).Load();
//explicit reference property lazy load
context.Entry(MyEntity).Reference(x=>x.ChildEntity).Load();

ここに役立つガイドがあります: http://msdn.microsoft.com/en-us/data/jj574232

于 2013-06-26T06:34:12.877 に答える
3

.ToList(); の前に .Include ("path")を追加してみてください。

public IList<Question> GetQuestions(int subTopicId, int questionStatusId)
{
    var questions = _questionsRepository.GetAll()
        .Where(a => a.SubTopicId == subTopicId &&
                    a.QuestionStatusId == questionStatusId)
        .Include("...")
        .ToList();
    return questions; 
}
于 2013-06-26T06:34:26.003 に答える