0

ASP.NET MVC (4) アプリケーション内で RavenDB を使用する場合、一連の関連エンティティを読み込んでビューに渡すための正しいパターンは何ですか?

標準的な例としてスタック オーバーフローを取り上げ、次のエンティティを想定します。

class User
{
    public int Id { get; set; }

    public string UserName { get; set; }
}

class Comment
{
    public int Id { get; set; }

    public string Body { get; set; }

    public string Author{ get; set; }
}

class Question
{
    public int Id { get; set; }
    // ...
    public List<Comment> Comments { get; set; }

    public Question()
    {
        Comments = new List<Comment>();
    }
}

やりたいことは、質問の下のコメントの横にユーザー情報を表示することです. コメントは質問ドキュメントの一部として保存されるのでIncludeComment.Author

クエリは次のようになります。

var question = RavenSession.Include<Question>(x => x.Author)
                           .Include<Comment>(x => x.Author)
                           .Load<Question>(id);

これですべてのコメントを含む質問オブジェクトができ、Raven クライアントは必要なすべてのユーザー プロファイルをキャッシュしました。ユーザー オブジェクトと関連するコメント オブジェクトをペアリングするための正しい / 最善 / 最も RavenDB が承認した方法は何ですか?

UserandCommentを に変換してCommentViewModel、それをクライアントに送信することもできますが、それはかなり手動のようです。

もう 1 つのオプションは、別のプロパティをCommentfor Author に追加することです。つまり[JsonIgnore]、getter で、Raven セッションからユーザーを遅延ロードします。Comment モデル オブジェクトは raven セッションへの参照を保持する必要があるため、これは汚いと感じます。

4

1 に答える 1

1

あなたはこのようにしたい:

var question = RavenSession.Include<Question>(x => x.Author)
                           .Include(x => x.Comments.Select(c=>c.Author))
                           .Load(id);

これは 1.2 で機能します。次に、Load(question.Author) を呼び出して、セッション キャッシュからドキュメントを取得できます。

于 2012-10-31T14:10:21.860 に答える