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

但是,这失败了,因为我收到一条错误消息“无法解析属性:页面:TestNamespace.Comment”。这通常表示映射错误,但它适用于所有其他情况,所以我倾向于相信错误在于查询。

更糟糕的是,Comment.Section 在某些情况下可能为空(有些评论与部分或页面无关)。在那种情况下,我想忽略这些评论。

有什么建议吗?

谢谢!

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 回答