首页
学习
活动
专区
工具
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

94660

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

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

1.2K20

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

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

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

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

1.9K70

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

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

2.3K50

NHibernate总结

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

90740

C#——Nhibernate探索

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

48230

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

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

60000

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

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

50910

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

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

1.2K60

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

还有就是继承IEnumerable对象让我们自己集合类型具备LINQ强类型查询能力。当然具体要看我们需求,技术角度看目前只有这两点可以扩展。...如果我们使用扩展方法那么只能是扩展IEnumerable对象,这没有问题。我们可以很方便在LINQ表达式调用我们自己扩展方法,让自己方法跟着一起链式查询。...只有这样才能真正让这种技术深入人心,才能在实际系统开发当中去灵活运用。 下面我们来构建一个简单IEnumerable扩展方法,用来处理当前集合数据是否可以进行数据插入操作。...顺便在扩展点使用思路,在目前MVVM模式其实也可以将V很多界面逻辑封装在扩展方法来减少VM耦合度和复杂度。包括现在MVC都可以适当采用扩展方法来达到更为便利使用模式。...如果想立即获取orderlist数据可以手动执行orderlist.Provider.Execute(orderlist.Expression)来获取数据。

1.4K11

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自己业务逻辑接口(实现了子类拓展,比方在某个类想要加入这个类特有的方法。仅仅须要在自己接口中填写就可以)。

55610
领券