Repo queryable仅返回前2个记录的行

时间:2013-10-09 12:31:01

标签: c# asp.net-mvc-4 nhibernate fluent-nhibernate

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

通过

检索记录时
season.Schedules.AsQueryable().Where(s => s.Week == 1).ToList();

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

以下是对象的映射:

季节:

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

时间表:

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

这是我的观点,我尝试迭代匹配,前两个工作,所有剩余的“匹配”对象为空(但在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>
            ........
}

有哪些方法可以帮助我弄清楚为什么它没有返回所有的“匹配”值,或者我的设置如何设置有什么问题(我不这么认为,因为前两个记录回来了...)

如果需要更多背景信息,请与我们联系。

更新
这是我从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

2 个答案:

答案 0 :(得分:1)

查看NHibernate生成的生成的SQL,因为我相信你会发现两个查询不同。

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

答案 1 :(得分:0)

Aw snap!我想到了。我没有告诉你的是Schedule表不包含MatchId列,这就是我用两个表映射的内容。应该是ScheduleId,两个表都包含......