通过子类结构在 nHibernate 表上使用 Linq 按类型查询

Posted

技术标签:

【中文标题】通过子类结构在 nHibernate 表上使用 Linq 按类型查询【英文标题】:Query by type using Linq on an nHibernate table by sub-class structure 【发布时间】:2010-08-19 08:48:28 【问题描述】:

我有一个相当复杂的实体结构,其中几个类从一个基类继承,因此在 nhibernate 中选择一个表的每个子类结构。

基础项目

ProjectA : BaseProject  
ProjectB : BaseProject  
ProjectC : BaseProject  
ProjectD : BaseProject

我想搜索其中一个条件将是 ProjectType。我试图避免为每个 ProjectType 编写单独的查询规范。

有人知道如何实现吗?它甚至是 Linq to nHibernate 可以做的事情吗,因为我认为它还没有完成。

我期待像 x => x.GetType() == typeof(ProjectTypeA) 这样的东西可以工作,但它没有。

【问题讨论】:

【参考方案1】:

不幸的是,您所描述的方法是使用当前 Linq 提供程序执行此操作的唯一方法。您需要公开每个子类公开的使用 NHibernate 映射的属性(可能是枚举)。一个有用的技巧是将此属性映射到 update=false 以确保它永远不会更改。

您可以查看我对类似问题here 的回答了解更多详情。

【讨论】:

以上是关于通过子类结构在 nHibernate 表上使用 Linq 按类型查询的主要内容,如果未能解决你的问题,请参考以下文章

Nhibernate子类映射问题

Fluent nHibernate - 如何在联结表上映射非键列?

NHibernate 在单独的程序集中加入了子类

Fluent NHibernate:如何在关系表上映射具有附加属性的多对多关系?

通过代码进行 Nhibernate 一对一映射

使用 2 种策略通过 fluent nhibernate 映射类层次结构