0

親オブジェクト (シーズン) のリポジトリ設定があります。そのシーズン オブジェクトには、子オブジェクト (スケジュール) が含まれています。次に、そのオブジェクトには Match という子オブジェクトがあります。

経由でレコードを取得する場合

season.Schedules.AsQueryable().Where(s => s.Week == 1).ToList();

最初の 2 つのスケジュールの「Match」レコードのみが返されます。SSMS にアクセスすると、すべてのスケジュールの「一致」レコードが返されます。

オブジェクトのマッピングは次のとおりです。

シーズン:

HasMany(x => x.Schedules).KeyColumn("SeasonId");

スケジュール:

HasOne(x => x.Match).ForeignKey("MatchId");

最初の2つが機能し、残りの「Match」オブジェクトはすべてnullです(ただし、SSMSで「クエリ」を実行すると、それらは入力されます.

@model LeagueManager.Models.MatchModel
@foreach (var schedule in Model.Schedules.Where(s => s.Week == 1))
        {
            <div class="row">@schedule.Match.MatchResults25Game.Game1.PlayerA.DisplayName vs @schedule.Match.MatchResults25Game.Game1.PlayerB.DisplayName</div>
            <div class="row">@schedule.Match.MatchResults25Game.Game2.PlayerA.DisplayName vs @schedule.Match.MatchResults25Game.Game2.PlayerB.DisplayName</div>
            <div class="row">@schedule.Match.MatchResults25Game.Game3.PlayerA.DisplayName vs @schedule.Match.MatchResults25Game.Game3.PlayerB.DisplayName</div>
            <div class="row">@schedule.Match.MatchResults25Game.Game4.PlayerA.DisplayName vs @schedule.Match.MatchResults25Game.Game4.PlayerB.DisplayName</div>
            ........
}

すべての「一致」値が返されない理由を理解するのに役立つ方法は何ですか、またはすべての設定方法に問題があります (最初の 2 つのレコードが戻ってくるので、そうは思いません... )

さらに背景情報が必要な場合はお知らせください。

更新
Express Profiler から取得したものは次のとおりです。

exec sp_executesql N'
SELECT schedules0_.SeasonId as SeasonId2_,
schedules0_.ScheduleId as ScheduleId2_,
schedules0_.ScheduleId as ScheduleId12_1_,
schedules0_.Week as Week12_1_,
schedules0_.MatchNumber as MatchNum3_12_1_,
schedules0_.MatchDate as MatchDate12_1_,
schedules0_.SeasonId as SeasonId12_1_,
schedules0_.TeamA as TeamA12_1_,
schedules0_.TeamB as TeamB12_1_,
match1_.MatchId as MatchId3_0_,
match1_.MatchResults25GameId as MatchRes2_3_0_
FROM Schedule schedules0_
left outer join Match match1_ on schedules0_.ScheduleId=match1_.MatchId
WHERE schedules0_.SeasonId=@p0',N'@p0 int',@p0=1
go
4

2 に答える 2

1

SQL2 つのクエリが異なることがわかると確信しているので、NHibernate が生成している生成されたものを見てください。

log4net を有効にするか、 NHProfをダウンロードするか、SQL プロファイラーを確認することができます (SQL サーバーを使用している場合)。

于 2013-10-14T07:30:21.250 に答える
0

あースナップ!私はそれを考え出した。お見せできなかったのは、Schedule テーブルに MatchId 列が含まれていないことです。これは、2 つのテーブルをマッピングしていたものです。両方のテーブルに含まれる ScheduleId である必要があります...

于 2013-10-11T04:57:24.423 に答える