0

我有一个父对象(季节)的回购设置。该季节对象包含一个子对象(时间表)。然后该对象有一个名为 Match 的子对象。

通过检索记录时

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

它只返回前 2 个时间表的“匹配”记录。如果我去 SSMS,它会返回所有时间表的“匹配”记录。

以下是对象的映射:

季节:

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

日程:

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

这是我尝试迭代匹配项的视图,其中前 2 个有效,并且所有剩余的“匹配”对象均为空(但在 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

查看SQLNHibernate 生成的生成,因为我相信您会发现这两个查询是不同的。

您可以启用 log4net、下载NProf或查看 SQL Profiler(如果使用 SQL 服务器)。

于 2013-10-14T07:30:21.250 回答
0

哦,快!我想到了。我没有向您展示的是 Schedule 表不包含 MatchId 列,这就是我映射这两个表的内容。它应该是 ScheduleId,两个表都包含...

于 2013-10-11T04:57:24.423 回答