5

,我有以下數據模型:如何做多與NHibernate標準API加入

Page 
- Id  // Pk 
- Type // int 

Section 
- Id  // Pk 
- Page // Fk 

Comment 
- Id  // Pk 
- Section // Fk 
- Date // DateTime 

我想查詢與某個特定頁面(說page.id = 2和頁面相關聯的所有評論.Type = 1)在時間限制內。我想這樣的:

var criteria = session.CreateCriteria<Comment>() 

    .Add(Restrictions.Eq("Section.Page.Id", pageId)) 
    .Add(Restrictions.Eq("Section.Page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

然而,這種失敗,因爲我得到一個錯誤說「無法解析屬性:的頁:TestNamespace.Comment」。這通常會指示映射錯誤,但它適用於所有其他情況,所以我傾向於相信錯誤在於查詢。

更糟糕的是,Comment.Section可能在某些情況下,空(有未用部分也不頁面相關的註釋)。在這種情況下,我想忽略這些評論。

有什麼建議嗎?

謝謝!

+0

瀏覽您可以添加定義爲損失類型的標準是根據? – Richard

+0

嗯,我從某處複製了那個代碼..loss實際上應該是註釋。我編輯了帖子並修正了錯誤。 – user315648

回答

4
var criteria = session.CreateCriteria<Comment>() 
    .CreateAlias("Section", "section") 
    .CreateAlias("section.Page", "page") 
    .Add(Restrictions.Eq("page.Id", pageId)) 
    .Add(Restrictions.Eq("page.Type", pageType)) 
    .Add(Restrictions.Ge("Date", start)) 
    .Add(Restrictions.Lt("Date", end)); 

我根據您的評論更新了代碼。第二行專門添加了,第三行使用第二行中的別名而不是屬性,依此類推。

+0

這給出了一個錯誤: 錯誤:42P01:缺少表的FROM-clause條目 – user315648

+0

請檢查更新的答案。 – Meligy

+0

現在有效!謝謝! – user315648

0

可以使用其他個createCriteria通過調用數據庫結構

var criteria = session.CreateCriteria<Comment>() 
       .Add(Restrictions.Ge("Date", start)) 
       .Add(Restrictions.Lt("Date", end)) 
       .CreateCriteria("Section") 
       .CreateCriteria("Page") 
       .Add(Restrictions.Eq("Id", pageId)) 
       .Add(Restrictions.Eq("Type", pageType));