2013-10-09 38 views
0

我有一個父對象(季節)的回購設置。該季節對象包含一個子對象(日程表)。然後該對象有一個名爲Match的子對象。Repo queryable只返回前2條記錄的行

當通過

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> 
      ........ 
} 

有什麼方法可以幫助我找出爲什麼它沒有返回所有的「匹配」值,或者是我的所有設置有什麼問題(我不會這麼認爲,因爲前兩條記錄來返回ok ...)

讓我知道是否需要更多的背景信息。

UPDATE
這是我從快遞探查獲得:

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 [email protected]',N'@p0 int',@p0=1 
go 
+2

看看NHibernate生成的SQL,然後告訴我們,你需要什麼SQL。 – Rippo

+0

作爲一般性考慮,您的視圖只能與ViewModel對象進行交互,而不能與任何DB Repository進行交互。也許這正是你在做什麼,只擊中已經加載在顯存邏輯中的對象。這可以解釋爲什麼你從數據庫中獲得不同的結果tahn – jbl

+0

你確定你在計劃和匹配(HasOne)之間有一對一的關係嗎?如果不是,我會用'References'代替'HasOne'(多對一) – rivarolle

回答

1

看看生成的SQL NHibernate生產,因爲我相信你會發現兩個查詢是不同的。

您可以啓用log4net,下載NHProf或查看SQL Profiler(如果使用SQL Server)。

0

喔唷,崩潰啦!我想到了。我沒有告訴你的是Schedule表不包含MatchId列,這就是我用這兩個表來映射的。它應該是ScheduleId,這兩個表包含...

+1

啊,所以生成的SQL顯示了你的方式!我完全推薦在NHibernate中使用一個類似NHProf的分析器,它已經多次保存了我的培根; ) – Rippo

+0

@Rippo是的。這可以被認爲是一個「答案」,所以我可以給你點數? – ganders

+0

如果它有幫助,並讓你回答,那麼是的,這是一個可以接受的答案。在下面回答。謝謝 – Rippo