3

2 つのクラスがあります (これらは RavenDB に保持されます)。

public class Game
{
    public int Id { get; set; }
    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }
    public DateTime GameTime { get; set; }
    public string Location { get; set; }
    public int HomeTeamScore { get; set; }
    public int AwayTeamScore { get; set; }
}

public class Team
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? PositionInGroup { get; set; }
    public int? PositionInPlayOffs { get; set; }
    public string Group { get; set; }
}

次のように、チーム名、日付、場所を含むすべてのゲームを出力したい:

ポーランド - ギリシャ、2012-06-08 18:00:00 - ワルシャワ (POL)

ホーム チーム名とアウェー チーム名を Game エンティティに含めることができることはわかっていますが、その代わりに、Include RavenDB インクルード機能を使用したいと考えています。

私はこのコードを書きました:

// Print the schedule
var games = session
    .Query<Game>()
    .Customize(c => c.Include<Game, Team>(i => i.Id))
    .OrderBy(x => x.GameTime)
    .ToList();


foreach (var g in games)
{
    var homeTeam = session.Load<Team>(g.HomeTeamId);
    var awayTeam = session.Load<Team>(g.AwayTeamId);
    Console.WriteLine(
        string.Format("{0} - {1}, {2} - {3}",
        homeTeam.Name,
        awayTeam.Name,
        g.GameTime,
        g.Location));
}

正しいことを理解していれば、ループ内でホーム チームとアウェイ チームをロードするときに、サーバーに対して get リクエストを発行するべきではありませんか? しかし、ログを見ると、次のことがわかります。

リクエスト #1 654: GET - 0 ミリ秒 - Euro2012 - 200 - /docs/teams/34

キー 'teams/34' を持つドキュメントが見つかりました

サーバーに発行される最初のリクエストは次のようになります。

リクエスト #1 648: GET - 5 ミリ秒 - Euro2012 - 200 - /indexes/dynamic/Games?query=&start=0&pageSize=128&aggregation=None&sort=GameTime&include=Id(teams/)

したがって、チームを「含める」必要があるようです

私は何か間違ったことをしていますか?

4

2 に答える 2

3

私はクエリの Customize() 部分に精通していません。Include() を単独で実行できます。例を次に示します。

http://inaspiralarray.blogspot.com/2012/03/Keeping-domain-model-pure-with-ravendb.html

Include() は IRavenQueryable であり、Raven.Client.Lightweight アセンブリにあります。

于 2012-04-09T14:03:15.260 に答える