我有以下数据模型:
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 可能为空(有些评论与部分或页面无关)。在那种情况下,我想忽略这些评论。
有什么建议吗?
谢谢!
最佳答案
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 行中的别名而不是属性,依此类推。
关于c# - 如何使用 NHibernate Criteria API 进行多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309364/