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