c# - 如何使用 NHibernate Criteria API 进行多重连接

标签 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.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/

相关文章:

c# - Session.SetString 方法抛出异常 "IFeatureCollection has been disposed. Object name: ' Collection'。 "在 ASP.NET Core 3.1 中

c# - URL 重写中间件 ASP.Net Core 2.0

c# - NHibernate 是否应该清除 ISessionFactory.Dispose 上的分布式二级缓存?

c# - 使用 Fluent NHibernate 映射大字符串

fluent-nhibernate - 流畅的 nhibernate 编码设置

c# - 在 C# 中预分配文件空间?

c# - 有没有办法从 .NET 使用 Kafka Ksql 推送查询

nhibernate - 无法从NHibernate.Driver.SQLiteDriver创建驱动程序

c# - 配置FluentNHibernate、FluentMappings.AddFromAssembly;意义

asp.net - Fluent NHibernate,动态改变映射表?