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>();
}
}
やりたいことは、質問の下のコメントの横にユーザー情報を表示することです. コメントは質問ドキュメントの一部として保存されるのでInclude
、Comment.Author
クエリは次のようになります。
var question = RavenSession.Include<Question>(x => x.Author)
.Include<Comment>(x => x.Author)
.Load<Question>(id);
これですべてのコメントを含む質問オブジェクトができ、Raven クライアントは必要なすべてのユーザー プロファイルをキャッシュしました。ユーザー オブジェクトと関連するコメント オブジェクトをペアリングするための正しい / 最善 / 最も RavenDB が承認した方法は何ですか?
User
andComment
を に変換してCommentViewModel
、それをクライアントに送信することもできますが、それはかなり手動のようです。
もう 1 つのオプションは、別のプロパティをComment
for Author に追加することです。つまり[JsonIgnore]
、getter で、Raven セッションからユーザーを遅延ロードします。Comment モデル オブジェクトは raven セッションへの参照を保持する必要があるため、これは汚いと感じます。