首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以使用ICriteria从NHibernate查询中获取一个懒惰的IEnumerable?

是的,您可以使用ICriteria从NHibernate查询中获取一个懒惰的IEnumerable。NHibernate是一个用于.NET平台的对象关系映射(ORM)框架,它允许您将数据库表与.NET对象之间建立映射关系,并提供了强大的查询功能。

在NHibernate中,ICriteria接口是一种查询方式,它允许您使用类似于SQL的语法来查询数据库。当您使用ICriteria查询时,您可以使用SetResultTransformer方法将查询结果转换为IEnumerable类型的懒惰加载集合。懒惰加载是一种延迟加载技术,它允许您在需要时才加载相关数据,从而提高应用程序的性能和内存使用效率。

以下是一个使用ICriteria查询并获取懒惰IEnumerable的示例代码:

代码语言:csharp
复制
using NHibernate;
using NHibernate.Criterion;
using System.Collections.Generic;

public class ExampleRepository
{
    private ISession _session;

    public ExampleRepository(ISession session)
    {
        _session = session;
    }

    public IEnumerable<ExampleEntity> GetExamples()
    {
        ICriteria criteria = _session.CreateCriteria<ExampleEntity>();
        criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);
        criteria.SetFetchMode("RelatedEntity", FetchMode.Join);
        return criteria.List<ExampleEntity>().AsEnumerable();
    }
}

在上面的示例代码中,我们首先创建了一个ICriteria查询,然后使用SetResultTransformer方法将查询结果转换为IEnumerable类型的懒惰加载集合。最后,我们使用List方法执行查询并返回结果。

需要注意的是,使用懒惰加载时,您需要确保在访问相关数据之前,会话(ISession)对象仍处于打开状态。如果会话已经关闭,您将无法访问相关数据,并且可能会引发异常。因此,在使用懒惰加载时,请确保会话对象的生命周期得到正确的管理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...之旅(四)-- 关系(下) 安装 现在在项目中使用FN很方便,使用Nuget管理就可以了,但我还是建议大家,可以下载源代码,自己可以详细了解下。...说个题外话,NuGet真心不错,至少已经做新项目的时候不用到处去整理lib包了,从NuGet进行下载、更新、卸载都很方便,而且还能自搭建自己公司的服务器,不过目前还是有些问题,有时候在下载最新包无法使用的情况下...,ORM最大的好处就是我们可以随意的变更我们的数据库类型,不需要考虑其类型,这是我选择Nhibernate的原因,EF虽然通过扩展能够支持其他数据库,但我相信用EF使用其他数据库的人很少吧。...今天介绍了AutoMapping简单的介绍,但在使用中您要时刻注意,AutoMapping是有很多限制的,比如Id,比如Component等,当然我们可以通过重写DefaultAutomappingConfiguration

97760
  • C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。...它们可能只是一些普通的POCO,仅仅是与ISession中关联起来了。只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层的任意地方使用。...这种状态通常是从数据库中获取到数据或者新建的数据附加到了上下文中。 detached 游离态 该状态的对象是从上下文中分离出来的,有了数据库主键,曾经或现在仍然有一条数据库记录与之对应。...这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置项有很多,但一大部分通常情况都遇不到使用它的时候。...max_fetch_depth 最大递归深度,表示一次查询中直接加载的导航属性深度。默认是不直接加载导航属性,基于延迟加载的逻辑,由实际使用时才从数据库中加载数据。

    1.3K20

    Dapper.Net 应用

    如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。...2.为什么使用 轻量,编译完成之后只有120k(好象是变胖了) 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。 支持多种数据库。...Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server 可以映射一对一...通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。 支持FrameWork2.0,3.0,3.5,4.0,4.5 3.使用Dapper.Net并演示 1....testName"; return this.GetEntity(sql, new { testName = name }); } } 构造一个简单

    1.5K100

    DDD理论学习系列(12)-- 仓储

    当工厂生产了一批货物时,只需交给仓库管理员即可,他负责货物的堆放;当需要发货的时候,仓库管理员负责从仓库中捡货进行货物出库处理。当需要库存盘点时,仓库管理员负责核实货物状态和库存。...以下的仓储实现是借助于ORM框架Nhibernate的ISession接口,它扮演一个的网关角色,负责领域模型和数据模型的映射。...但是,尝试将泛型仓储应用所有仓储并不是一个好的主意。对于简单的聚合我们可以直接使用泛型仓储来简化代码。...比如,在实体中我们一般使用IsActive或IsDeleted属性来表示软删除,而一旦实体中的某条数据被删除,那么UI中基本不会再显示这条数据,那对于实体的查询都需要包含类似Where(c=> c.IsActive...如果您有一个关系数据库并且正在使用ORM作为数据模型,那么您可能能够延迟加载一些领域对象属性,这样就可以推迟加载不需要的聚合部分。

    2K70

    C# 数据操作系列 - 12 NHibernate的增删改查

    :可选项,默认是none,一种默认的级联风格 auto-import:明确是否可以在查询中使用非限定类名。...,默认情况从Property 中读取 default-lazy:可选的,默认是true,是否启动延迟加载 1.2 class的配置 一般情况下,class节点只需要指定name和table就可以了。...中,多对一的配置是在一的一端,表示该类有一个外键导航。...(); } 其中 IQueryable是一个接口,表示这是一个可查询对象,通过Linq可以快捷的查询。...总结 嗯,NHibernate基础使用篇到这里可以暂告一段落了。后续的内容有机会再深挖,当然并不代表EF Core就没有了。嗯嗯,没毛病。下一篇就让我来先替大伙看看SugarSQL是什么情况吧。

    1.1K20

    LINQ在开发中的地位?

    在Linq之前在.net领域最流行的框架就是Nhibernate。是不是在LINQ之后Nhibernate就要消失呢?答案自然是否定的。...这里有个帖子Microsoft LINQ + NHibernate: 在那篇帖子中,作者列举了三大原因: 在DLINQ中,虽然可以在语言层级定义查询逻辑。...而LINQ + NHibernate的好处则是: 类型安全的查询,并且能使用智能提示功能!这样可以不用学习HQL了。 能获得所有NHibernate所拥有的能力。...假如你已经从数据库中查询出了一个数据集,那么可以使用LINQ来进行过滤,排序和分页操作。...LINQ没有提供在多层应用程序中应用的功能,这一个功能可以通过序列化Expression Tree 来解决,Expression Tree 就可以通过Remoting或者WCF发布出去,正好有一个开源项目解决这个问题

    1.4K60

    C# 基础知识系列-7 Linq详解

    Max 选取最大的一个 Max获取数据源中最大的一个,不过只能是数字类型的,其他类型因为不能直接比较大小所以可以有替代方法,就是先排序取第一个。...获取两个集合中都存在的数据 获取同时存在于两个集合中的元素,与Union类似。...List students = students1.Intersect(students2).ToList(); Except 获取只在第一个数据源中存在的数据 获取只存在于第一个集合的元素...以上是官方介绍,我在开发过程中并没有使用过这个方法,不过这个方法完全可以认为是Join和Group的组合体,即先进行了一次Join然后又对数据进行一次分组。...resultSelector Funcienumerable,TResult> 用于从第一个序列的元素和第二个序列的匹配元素集合中创建结果元素的函数。

    2.4K50

    NHibernate总结

    现在的项目中数据访问使用的是NHibernate的一个ORM框架,小弟也是在后期加入项目组,之前对NHibernate就一直没有接触过,所以一直在学习NHibernate,都是一些很基础的一些东西,写出来总结一下...NHibernate不仅仅管理.NET 类到数据库表的映射(包括.NET 数据类型到SQL 数据类型的映射),还提供数据查询和获取数据的方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据的时间...开始使用NHibernate 我们亲自动手,一步一步实现一个NHibernate简单程序来,我只实现了简单的增删改查功能。...首先,我们要从ISessionFactory中获取一个ISession(NHibernate的工作单元)。ISessionFactory可以创建并打开新的Session。...ISessionFactory通常是个线程安全的全局对象,只需要被实例化一次。我们可以使用GoF23中的单例(Singleton)模式在程序中创建ISessionFactory。

    94040

    C#——Nhibernate探索

    这里有两个类库;可以分析得出,这两个类库是要被引用的。 类库拥有对应的XML,没找到具体使用该XML的方法。所以暂时不去理他。 NHibernate.pdb应该是没有用的。估计是作者忘记删除了。...但看到.xsd文件,第一时间反应,他们应该是用来帮助开发者,快速生成配置文件用的。为了保险起见,我们上网查询一下。 查询结果: 查询结果是,他们俩是【文件智能提示功能】用的。...,用于测试我们编写的这个NHibernate,是否可以正常运行。...最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。 结果是我没改,测试一切正常。可以顺利使用。  ...为什么说是探索之旅呢,因为,我也是首次配置Nhibernate,我平常更多的是使用Entity Framework。 文中使用了一些推断,猜测的词语。那是因为,真的是在推断的。

    50330

    C# 基础知识系列- 14 IO篇 文件的操作(2)

    其中使用 searchPattern查询名称,enumerationOptions 作为查询条件,searchOption 作为查询的深度。...同样,查询文件也可以使用枚举方法: public static System.Collections.Generic.IEnumerable EnumerateFiles (string...public static string GetCurrentDirectory (); 在程序中调用这个方法可以获取程序执行时的目录,如果是在调试阶段,目录是指程序的主方法所在目录;如果在发布之后,...public DirectoryInfo (string path); 初始化的方式很简单,直接传递一个目录的路径字符串,就可以获取一个目录信息类了。...简单介绍一下这个工具的内容:它会遍历系统里所有文件的路径信息,然后记录到一个缓存文件中,用户输入一个要查询的文件名时,我们可以通过读取缓存文件确认文件所在目录。

    62800

    C# 基础知识系列- 14 IO篇 文件的操作 (2)

    其中使用 searchPattern查询名称,enumerationOptions 作为查询条件,searchOption 作为查询的深度。...同样,查询文件也可以使用枚举方法: public static System.Collections.Generic.IEnumerable EnumerateFiles (string...public static string GetCurrentDirectory (); 在程序中调用这个方法可以获取程序执行时的目录,如果是在调试阶段,目录是指程序的主方法所在目录;如果在发布之后...public DirectoryInfo (string path); 初始化的方式很简单,直接传递一个目录的路径字符串,就可以获取一个目录信息类了。...简单介绍一下这个工具的内容:它会遍历系统里所有文件的路径信息,然后记录到一个缓存文件中,用户输入一个要查询的文件名时,我们可以通过读取缓存文件确认文件所在目录。

    53010

    Fluent NHibernate之旅(四)-- 关系(上)

    Mapping 今天我们将说一下ORM中的R映射,我们现在的数据库大多都是关系型数据库了,所以可以说关系在我们数据库设计中也是非常重要的部分,NHibernate也非常重视这一块,但在传统方式中,配置就比较麻烦...ID与User的ID是一致的,所以我们要使用Foregin来获取User的ID。...Xunit,可以点此下载 一个插入测试,一个查询测试,看看测试结果: ?...User就可以了,我不需要查询UserDetail,或许你会说,使用以下方式来进行延迟加载: HasOne(u => u.Detail).Cascade.All().LazyLoad...NHibernate是不支持one-to-one的延迟加载的,我也不知道为什么,但我们可以婉转的进行延迟加载,老赵已经在他的文章“NHibernate中一对一关联的延迟加载”中提出了解决方案,大家可以看一下

    1.2K60

    NET中小型企业项目开发框架系列(一个)

    当时的前端,我们开发了基于Net一组结构sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,如今把整个开发过程中的步步进展整理出来和大家分享,这个系列可能有点长...,主要是靠Nhibernate的定义通用的增删改从,然后其它类继承增删改查接口和对应的自己定义的子类的接口,实现拓展 首先,我们从曾经的写代码经验知道,我们的Dao主要是做增删改查等方面,我们就先定义一个公共方法的接口叫做...接下来,就是Dao部分,我们须要非常谨慎的去设计, 首先我们要设计一个用Nhibernate实现的公共父类的CommonSupportDAL类,用它来实现增删改查, <span style="font-family...string typename = entity.GetType().ToString(); throw new Exception("请检查" + typename + "中是否存在主键...一个是ICaseAssignEntityRepository自己的业务逻辑接口(实现了子类的拓展,比方在某个类中想要加入这个类特有的方法。仅仅须要在自己的接口中填写就可以)。

    58610

    盘点 .NET 比较流行的开源的ORM框架

    支持 Join 查询、Union all 、Subquery 支持配置查询 支持 DbFirst 从数据库导入实体类,或使用生成工具。...您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。 开发人员使用Linq语言,对数据库操作如同操作object对象一样省事。 EF有三种使用场景: 1、从数据库生成Class。...插入/删除/更新/保存和 IsNew 的辅助方法 分页请求会自动计算出总记录数并获取特定页面。 简单的交易支持。 更好的参数替换支持,包括从对象属性中获取命名参数。...通过使用 DynamicMethod 生成消除 Linq 和快速属性分配来获得出色的性能。 查询语言是好的 ole SQL。 包括一个低摩擦的 SQL 构建器类,使编写内联 SQL变得更加容易。

    4.2K42
    领券