NHibernate:使用条件对值列表进行查询过滤

2024-01-01

我正在尝试使用条件 API 按值列表进行过滤。我怀疑这是不可能的,我只是在这里问一下以确定。

class Entity
{
  int id { get; set; }
  IList<Guid> Guids { get; set; }
}

映射:

<class name="Entity">
  <id ...></id>
  <bag name="Guids" table="Entity_Guids">
    <key column="Entity_FK"/>
    <element column="Guid"/>
  </bag>
</class>

假设我有一个 Guid 列表(实际上这是另一个子查询)。我想过滤Guids列表中至少有一个guid的所有实体。

Sql 看起来像这样:

SELECT * 
FROM Entity e 
  inner join Entity_Guids eg 
    on  e.id = eg.Entity_FK
WHERE 
  eg.Guid in (subquery)

对于 Criteria API,这似乎是不可能的。

ICriteria query = session
  .CreateCriteria(typeof(Entity), "e")
  .Add(Subqueries.In("e.Guids", subquery))

抛出异常。


您的查询将不起作用,因为传递给子查询的 e.Guids 属性不是单个值。为此,您实际上是在尝试执行交集并检查该交集是否不为空,不幸的是,标准 api 中不存在该交集,尽管您可以使用 Linq 来执行此操作。

如果您的 Guid 是具有适当属性的实体(Value 属性包含实际的 Guid)并且存在双向关系,您可能仍然可以执行此操作:

var subquery2 = DetachedCriteria.For<GuidEntity>()
  .Add(Subqueries.In("Value", subquery))
  .SetProjection("Entity_FK");

ICriteria query = session.CreateCriteria(typeof (Entity))
  .Add(Subqueries.In("Id", subquery2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate:使用条件对值列表进行查询过滤 的相关文章

  • 如果 2 个或更多人同时更新记录会发生什么?

    我使用 NHibernate 的版本属性 每次更新聚合根时该属性都会自动递增 如果 2 个或更多人同时更新同一条记录会发生什么 另外 我将如何测试这个 请注意 这不是我遇到过的情况 只是想知道 什么是原子的 什么不是 正如其他人所说 SQL
  • 提高 nHibernate 数据访问层的性能

    我正在致力于提高现有 Asp Net Web 应用程序的数据访问层的性能 场景是 它是一个基于 Asp Net 的 Web 应用程序 DataAccess 层使用 NHibernate 1 2 构建并公开为 WCF 服务 Entity 类用
  • 使用 NHibernate 深复制实体

    我目前正在工作中启动一个新的 ASP NET MVC 项目 我们需要生成项目成本估算 我们使用 NHibernate ASP NET MVC 1 0 和 StructureMap 客户希望能够填写有关项目的所有信息 这些信息位于不同的页面中
  • 发生异常后不刷新会话 - NHibernate

    我正在 NET 3 5 NHibernate 下开发一个 ASP NET MVC Web 应用程序 并托管在 Windows Azure 上 当 web 应用程序从本地开发结构运行时 它可以正常工作 然而 当我将其移动到 Windows A
  • 多列多对一

    我有一个遗留数据库和两个表之间一对一的关系 问题是关系使用两列 而不是一列 在 nhibernate 中是否有某种方法可以说 当获取引用的实体时 它在 join 语句中使用了两列 而不是一列 我有一个类似的表结构 任务进度 进度ID Tas
  • 为什么 NHibernate 在选择时删除然后插入复合元素?

    有人可以向我解释一下关于 NHibernate 如何处理复合元素的这个小谜团吗 我的课程看起来像这样 public class Blog public virtual int Id get private set public virtua
  • NHibernate 中没有持久化:Castle.Proxies.Proxy 和lazy="true"?

    我正在尝试对我的实体之一的属性使用延迟加载 属性映射是这样的
  • 如何让 NHibernate 缓存获取的子集合?

    我有一个相当简单的条件查询来获取子集合 如下所示 var order Session CreateCriteria
  • NHibernate 应如何更新映射为版本的属性

    使用流畅的 NHibernate 我在使用映射的类上有一个属性Version Version x gt x Version 当我保存对象时 Version 属性会按照我的预期在数据库中递增 但对象上的属性值似乎只是有时会发生变化 using
  • Set 内元素的 Hibernate 标准

    我有一个实体 其中包含一组另一个实体 Entity1 包含集合EntityTwos 我想为entityTwos 中的 id 字段创建搜索条件 我搜索过 但没有得到任何答案 有人有主意吗 谢谢 斯里 很容易 就像是 criteria crea
  • Get 和 Load 之间的区别

    有什么区别Get
  • 使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式

    我正在尝试使用内存中的 SQLite 数据库来测试 NHibernate 提供的数据层 我读过很多关于如何进行此设置的博客和文章 但我现在很困惑为什么它不起作用 问题 当我运行单元测试时 我收到错误 没有这样的表 学生 我读过的文章表明这
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet
  • 从实体获取单列

    如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象 但我想要的只是名称 IList
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • NHibernate:将 ICriteria 转换为 DetachedCriteria

    任何人都知道如何将 ICriteria 转换为 DetachedCriteria 我需要使用现有的 ICriteria 作为子查询的一部分 使用 Add Subqueries PropertyIn Name myDetachedCriter
  • NHibernate - 无法执行查询 - 输入字符串的格式不正确

    我已经为此摸不着头脑有一段时间了 我不知道出了什么问题 概述 我的 MySQL 数据库中有两个表 两者都正确映射到数据库 我可以加载数据 并且我能够查询一个表 但不能查询另一个表 我研究过的解决方案 表和 C 代码之间的类型转换问题 映射问
  • 如何使用 NHibernate 标准来做到这一点

    假设我有 2 张桌子 表1 a b 和表2 c a 我需要做这样的事情 但符合 NHibernate 标准 select a b select count from table2 t2 where t1 a t2 a x from tabl
  • 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

    我挖掘了很多关于DDD方法 无处不在的语言 聚合 存储库等 我认为 与我读到的很多内容相反 实体应该有行为而不是不可知论 我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数 受保护或最糟糕的是公开 就是这样 我认为这种对

随机推荐