9

私はこの非常に基本的なテーブル構造を持っています:

dbo.tblCategory
dbo.tblQuestion (tblCategory との多対 1 の関係)
dbo.tblAnswer (tblQuestion との多対 1 の関係)

基本的に、私がやろうとしているのは、カテゴリをロードするときに、すべての質問とすべての回答もロードしたいということです。

これで、次のコードを使用してこれを行うことができました。

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include("tblQuestion")
                                           .Include("tblQuestion.tblAnswers")    
                 where t.Id == id
                 select t).FirstOrDefault();

            return entities.DetachObjectGraph(dto);
        }
    }
}

ただし、私はこれに完全に夢中になっているわけではありません。モデルで関係名が変更された場合。プロジェクトのビルド時にエラーが発生することはありません。理想的には、ラムダ式を使用したいと思います。このようなもの:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include(t => t.tblQuestion)
             where t.Id == id
             select t).FirstOrDefault();

        return entities.DetachObjectGraph(dto);
    }
}

さて、上記のスニペットで; Answers テーブルにドリルダウンする方法に行き詰まっています。このラムダ式に何を使用できるかについて何か考えはありますか?

4

1 に答える 1

8

わかった; ここからの助けを借りて、これを機能させることができました。

基本的に、私はこれを行う必要があります:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include(t => t.tblQuestion)
                                           .Include(t => t.tblQuestion.First().tblAnswer)
             where t.Id == id
             select t).FirstOrDefault();

        return entities.DetachObjectGraph(dto);
    }
}

上記のリンクから、質問コレクションの個々のアイテムのtblAnswersのみを逆参照できます。ここでは、コレクションの最初のアイテムでtblAnswersを逆参照することを選択しました。実際には、このラムダ式は、すべての質問の回答を熱心にロードするプロパティパス「tblQuestion.tblAnswers」を生成するために使用されるだけです。

したがって、最初の質問の回答のみを取得しているように見えますが、実際にはすべての質問のすべての回答を取得しています。

于 2010-07-06T19:06:45.817 に答える