我有一个父对象(季节)的回购设置。该季节对象包含子对象(计划)。然后该对象有一个名为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
答案 0 :(得分:1)
查看NHibernate生成的生成的SQL
,因为我相信你会发现两个查询不同。
您可以启用log4net,下载NHProf或查看SQL Profiler(如果使用SQL服务器)。
答案 1 :(得分:0)
Aw snap!我想到了。我没有告诉你的是Schedule表不包含MatchId列,这就是我用两个表映射的内容。应该是ScheduleId,两个表都包含......