NHibernate Linq 预加载与通用存储库

2024-02-07

目前,我们为所有实体使用通用存储库,该存储库公开 IQueryable(使用 NH3 linq 支持),然后我们的服务层使用该通用存储库来构建特定查询。

我现在需要急切地加载一个关联。有什么方法可以公开 IQueryable 并传入可选的获取表达式吗?我看到的问题是 Fetch 必须出现在表达式的最后(根据http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html).

我很好奇其他人是如何实现这一目标的。

我确实考虑过将 Linq 规范传递到存储库,以便可以在调用 Fetch 之前对这些规范进行评估。然而,我仍然需要某种方式来传递 Fetch 表达式。

谢谢 本


我使用我的超载FindOne and FindAll存储库调用来实现这一点..类似于:

Function FindOne(ByVal spec As ILinqSpecification(Of T)) As T
Function FindOne(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As T
Function FindAll(ByVal spec As ILinqSpecification(Of T)) As IQueryable(Of T)
Function FindAll(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)

etc..

也许不是最干净的方法,但它确实有效。我不确定这是否仍然是 trunk linq 提供程序的问题,但我也可以决定是否将不同的结果转换器应用于我的结果FindAll基于我的获取策略是否包含集合的场景。

我的规范和获取策略实现基于ncommon https://github.com/riteshrao/ncommon/项目。

作为参考,我的完整通用“只读”存储库界面如下:

Public Interface IReadOnlyRepositoryWithTypedId(Of T As IEntityWithTypedId(Of IdT), IdT)

    Function LoadById(ByVal id As IdT) As T
    Function GetById(ByVal id As IdT) As T
    Function FindOne(ByVal spec As ILinqSpecification(Of T)) As T
    Function FindOne(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As T
    Function GetCount() As Integer
    Function GetCount(ByVal spec As ILinqSpecification(Of T)) As Integer
    Function HasAny(ByVal spec As ILinqSpecification(Of T)) As Boolean
    Function FindAll(ByVal spec As ILinqSpecification(Of T)) As IQueryable(Of T)
    Function FindAll(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)
    Function FindAll() As IQueryable(Of T)
    Function FindAll(ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)

End Interface
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate Linq 预加载与通用存储库 的相关文章

  • NHibernate 获取 & 字符串 Id

    我在 NHibernate 上有一个分配了字符串 Id 的实体 并且在通过 Id 获取实体时遇到了一些问题 例子 假设有这样的数据库记录 Id Description AAA MyDescription 现在 如果我使用搜索 ID aaa
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet
  • 可排序的 Telerik 网格 + NHibernate、IQueryable 和 ASP.NET MVC

    我正在尝试让 Telerik 网格工作 分页工作正常 我的视图代码如下所示 Html Telerik Grid Model Name Grid Columns columns gt columns Bound o gt o ItemName
  • 使用按位运算符时的 HQL 到 CriteriaQuery

    如何将其转换为 CriteraQuery select n from TagRegistration t join t Tag n where t Status status gt 0 order by count t ID desc n
  • 如何判断一个引用的对象是否可以删除?

    我有一个名为 Customer 的对象 它将在其他表中用作外键 问题是我想知道是否可以删除 客户 即 它没有在任何其他表中引用 Nhibernate 可以做到这一点吗 你所要求的是找到的存在CustomerPK值在引用表FK列中 有很多方法
  • 我应该检查代码中的数据库约束还是应该捕获数据库抛出的异常

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • NHibernate HQL 相当于 T-SQL 的 TOP 关键字

    NHibernate HQL 相当于 T SQL 的 TOP 关键字是什么 另外 用非 HQL 方式说 给我一门课的前 15 个 是什么意思 在 HQL 中这实际上非常简单 var top15 session CreateQuery fro
  • NHibernate:级联保存到子级不会插入

    我有一个像这样的双向关联 public class Parent public int ParentId get set other properties public IEnumerable
  • NHibernate 3.2 通过代码(Conformist)字典属性的类映射

    假设我有一个类 So meClass 它有一个查找字典 数据字典 我目前在 SomeClass hbm xml 中有一个映射 如下所示
  • 在nhibernate中设置聚集索引

    我试图在 nhibernate 中定义一个不是 id 的属性作为聚集索引 但我发现没有办法做到这一点 谁能给我指点一下这是如何完成的 或者它是当前在 nhibernate 中不可用的东西 提前致谢 您可以使用
  • 更改 NHibernate Session.Save 命令超时

    我们有几个长时间运行的后端进程 其运行时间超过默认的 30 秒 我们的NHibernate版本是2 0 1 4000 Spring NET是1 2 0 20313 NHibernate 通过 Spring NET 进行配置
  • NHibernate双向多对多映射列表/包

    我正在努力处理双向多对多映射 其中顺序在一侧很重要 但在另一侧则不重要 我有两个班级 项目和学生 一个项目有很多学生 顺序很重要 方案A John Sally Seth 方案B Alex Seth Amy John 一个学生有很多程序 但顺
  • 最好的 NHibernate 二级缓存提供程序是什么?

    我见过有很多这样的 NCache Velocity 等等 但我还没有找到比较它们的表格 考虑以下标准什么是最好的 容易明白 最近正在维护中 是免费的或者有足够好的免费版本 Works 我无法说出什么是最好的或最差的 但我会分享我使用 NCa
  • NHibernate:CreateCriteria 和 Exists 子句

    如何使用 CreateCriteria 编写以下 SQL SELECT FROM FooBar fb WHERE EXISTS SELECT FooBarId FROM Baz b WHERE b FooBarId fb Id 您可以这样做
  • NHibernate Session.Flush & Evict 与 Clear

    在一个测试中 我想要持久化一个对象 然后通过从数据库 而不是会话 获取它来证明它是持久化的 我注意到以下内容没有区别 save it session Clear fetch it or save it session Flush sessi
  • linq查询的问题

    我正在尝试使用 linq to NHibernate 使用 Fluent NHibernate 但我在 linq 查询方面遇到问题 每次我尝试执行它时 我都会收到以下消息 方法 get IsReadOnlyInitialized 类型 NH
  • NHibernate QueryOver SQLFunction in where 子句

    我想查询一个具有多行的表 每行都有一个timestamp数据每隔十分钟出现一次 我想找到任何丢失数据的开头 即没有timestamp等于接下来的十分钟间隔 如下所示 select a timestamp from table as a wh
  • 如何在 Nhibernate 中进行版本控制?

    我不敢相信让别人向我展示一个简单的工作示例是如此困难 这让我相信每个人都只能说得好像他们知道如何去做 但实际上他们并不知道 我将帖子缩短为仅我想要示例执行的操作 也许帖子太长了 吓跑了人们 为了获得这个赏金 我正在寻找一个可以在 VS 20
  • NHibernate双向一对一映射问题

    当尝试在 NHibernate 中创建双向一对一映射时 我发现我无法递归地获得对象的引用 例如 假设我之间有一对一的关系Person and Address 然后执行以下代码后 class Person public Address Add
  • NHibernate、Fluent NHibernate 和 Iesi.Collection 的问题。接下来你会尝试什么?

    我对 NHibernate 非常陌生 所以如果我在这里遗漏了一些琐碎的事情 我深表歉意 我目前正在阅读 packtpub 出版的一本名为 NHibernate 3 Beginners Guide 的书 我基本上都是按照书中的指示进行的 当我

随机推荐