5

次のデータモデルがあります。

Page
- Id      // Pk
- Type    // int

Section
- Id      // Pk
- Page    // Fk

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

特定のページ (page.id = 2 および page.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));

ただし、「プロパティを解決できませんでした: Page of: TestNamespace.Comment」というエラーが表示されるため、これは失敗します。これは通常、マッピング エラーを示しますが、他のすべての場合に機能するため、エラーがクエリにあると信じがちです。

さらに悪いことに、場合によっては Comment.Section が null になることがあります (セクションにもページにも関連付けられていないコメントがあります)。その場合、私はそれらのコメントを無視したいと思います。

何かアドバイス ?

ありがとう!

4

2 に答える 2

6
  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));

あなたのコメントに基づいてコードを更新しました。2 行目は具体的に追加され、3 行目はプロパティの代わりに 2 行目のエイリアスを使用しています。

于 2011-09-06T06:14:13.473 に答える
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));
于 2011-10-25T15:05:09.373 に答える