C# 如何使用NHibernate标准API进行多个联接

C# 如何使用NHibernate标准API进行多个联接,c#,nhibernate,fluent-nhibernate,nhibernate-mapping,nhibernate-criteria,C#,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Nhibernate Criteria,我有以下数据模型: 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.CreateCriteri

我有以下数据模型:

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));
var-criteria=session.CreateCriteria()
.Add(Restrictions.Eq(“Section.Page.Id”,pageId))
.Add(Restrictions.Eq(“Section.Page.Type”,pageType))
.Add(限制.Ge(“日期”,开始))
.添加(限制。Lt(“日期”,结束));
然而,这失败了,因为我得到一个错误,上面写着“无法解析属性:Page of:TestNamespace.Comment”。这通常表示映射错误,但它在所有其他情况下都有效,因此我倾向于相信错误在于查询

更糟糕的是,Comment.Section在某些情况下可能为空(有些注释与节或页不关联)。在这种情况下,我想忽略这些评论

有什么建议吗

谢谢

var-criteria=session.CreateCriteria()
  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));
.CreateAlias(“节”、“节”) .CreateAlias(“section.Page”、“Page”) .Add(Restrictions.Eq(“page.Id”,pageId)) .Add(Restrictions.Eq(“page.Type”,pageType)) .Add(限制.Ge(“日期”,开始)) .添加(限制。Lt(“日期”,结束));

我根据你的评论更新了代码。专门添加了第2行,第3行使用第2行中的别名而不是属性,依此类推。

您可以使用其他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));
var-criteria=session.CreateCriteria()
.Add(限制.Ge(“日期”,开始))
.添加(限制.Lt(“日期”,结束))
.CreateCriteria(“节”)
.CreateCriteria(“第页”)
.Add(Restrictions.Eq(“Id”,pageId))
.Add(Restrictions.Eq(“Type”,pageType));

您能为标准所依据的损失类型添加定义吗?嗯,我从某处复制了该代码。损失实际上应该是注释。我编辑了帖子并修复了错误。这会产生一个错误:error:42P01:missing FROM子句条目for table