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

我可以选择性地关闭带有NHibernate的延迟加载吗?

NHibernate是一个.NET平台上的开源对象关系映射(ORM)框架,它提供了一种将对象模型映射到关系数据库的方式。NHibernate的延迟加载是指在查询数据时,只有在需要访问相关数据时才会从数据库中加载,以提高性能和减少不必要的数据库访问。

在使用NHibernate时,可以选择性地关闭延迟加载。关闭延迟加载可能会导致一次性加载所有相关数据,增加数据库访问的次数和数据传输量,但可以避免潜在的延迟加载带来的性能问题。

关闭NHibernate的延迟加载可以通过以下方式之一实现:

  1. 在查询时使用Fetch关键字:可以使用Fetch关键字来指定在查询时立即加载相关数据,而不是延迟加载。例如,可以使用Fetch关键字来加载关联的实体或集合属性。
  2. 在映射文件中配置FetchMode属性:可以在映射文件中为相关的实体或集合属性配置FetchMode属性,将其设置为Eager,表示在加载实体时立即加载相关数据。

需要注意的是,关闭延迟加载可能会导致性能下降和额外的资源消耗,因此在决定是否关闭延迟加载时,需要权衡性能和资源消耗的需求。

关于NHibernate的更多信息和使用方法,可以参考腾讯云的ORM框架产品TencentDB for SQL Server,它提供了对NHibernate的支持和集成,可以帮助开发者更方便地使用NHibernate进行数据库操作。具体产品介绍和文档可以参考腾讯云官网的TencentDB for SQL Server页面:https://cloud.tencent.com/product/tcdb

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

相关·内容

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

前言 今天是NHibernate第二篇内容,通过上一篇内容,我们初步了解了NHibernate创建和使用。这一篇,继续探索NHibernate背后秘密。嗯,就是这样。 1....它们可能只是一些普通POCO,仅仅是与ISession中关联起来了。只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层任意地方使用。...造成原因可能有,上下文关闭了;该对象是在另一个上下文中持久化,它对于当前上下文是游离态。 3....max_fetch_depth 最大递归深度,表示一次查询中直接加载导航属性深度。默认是不直接加载导航属性,基于延迟加载逻辑,由实际使用时才从数据库中加载数据。...(记得有update,但文档中没有这个选项) 以上是我们常用一些配置内容,当然还有更多配置,并没有在这里一一讲明,留待以后吧。 4.

1.2K20

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

我们一对一简单映射也说完了,同时也完成了Component映射,接下来说说延迟加载 一对一延迟加载 细心朋友一定会发现我们output出来Sql语句,使用是联合查询,但有时对我们来说,只需要...User就可以了,不需要查询UserDetail,或许你会说,使用以下方式来进行延迟加载: HasOne(u => u.Detail).Cascade.All().LazyLoad...(); 虽然Fluent支持,虽然编译通过,但在创建ISessionFactory时候,却会抛出异常,因为NHibernate不支持one-to-oneLazy特性,也就是说NHibernate不支持一对一延迟加载...).Cascade.All().Constrained(); 进行延迟加载,但结果只是分了2条Sql语句进行查询,并不是延迟加载,这一点可以通过Sql Server Profiler查看: ?...NHibernate是不支持one-to-one延迟加载也不知道为什么,但我们可以婉转进行延迟加载,老赵已经在他文章“NHibernate中一对一关联延迟加载”中提出了解决方案,大家可以看一下

1.2K60
  • NHibernate 缓存

    注意最后一句, 明确说明了一级缓存用途: 在对象树种导航、浏览时, 使用一级缓存; 根据对象 id 加载对象; 由此可以看出, 一级缓存作用是比较有限, 但是也有用得着地方。...测试代码如下: [Test] public void TestSessionGet() { using (var session = this...., 才从数据库加载, 也就是说, Load 方法是延迟加载。...NHibernate 二级缓存是可以扩展NHibernate.ControlLib 提供了几个实现, 分别适用于不同场景: NHibernate.Caches.MemCache NHibernate.Caches.Prevalence...include:可选,默认值为all,当取non-lazy时设置延迟加载持久化实例属性不被缓存。 usage:声明缓存同步策略,就是上面说明四种缓存策略。

    60411

    NHibernate总结

    如果你下个系统学习NHibernate,给大家推荐一个博客,详细介绍了NHibernate也是根据这篇博客学习。...开始使用NHibernate 我们亲自动手,一步一步实现一个NHibernate简单程序来,只实现了简单增删改查功能。...我们可以在该文件上点击右键选择属性进行修改。 (2)     NHibernateHelper.cs数据操作辅助类 我们现在可以开始NHibernate了。...virtual,要不然会报错 (4)     下面我们开始为People实体类进行数据库表映射配置People.hbm.xml NHibernate要知道怎样去加载和存储持久化类对象。...我们可以在People.hbm.xml点击右键选择属性修改该文件生成操作 (5)     NHData.cs对库表People进行增删改查 现在完事具备只欠东风了,开始我们数据库CRUD操作,在看该文件代码时

    92540

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

    ,默认情况从Property 中读取 default-lazy:可选,默认是true,是否启动延迟加载 1.2 class配置 一般情况下,class节点只需要指定name和table就可以了。...class="generatorClass"/> name : 对应属性名 type:对应NHibernate类型 column:列名 generator:主键生成器,如果不需要参数可以直接在...增删改查 Nhibernate每次操作都基于一个Session,所以我们在操作数据库时候最好先持有一个可用Session。接下来,我们就一个通用数据库操作类为基础,向大家分享一下想法。...entity in entities) { Session.Delete(entity); } } 2.4 查询 通常情况下,查询需要结合实际业务来进行开发,当然为了通用,在这里选择给调用方开放一个查询对象...总结 嗯,NHibernate基础使用篇到这里可以暂告一段落了。后续内容有机会再深挖,当然并不代表EF Core就没有了。嗯嗯,没毛病。下一篇就让来先替大伙看看SugarSQL是什么情况吧。

    1.1K20

    NHibernate 缓存

    大家好,又见面了,是你们朋友全栈君。 NHibernate 支持两种级别的缓存, 即一级缓存以及二级缓存。...注意最后一句, 明确说明了一级缓存用途: 在对象树种导航、浏览时, 使用一级缓存; 根据对象 id 加载对象; 由此可以看出, 一级缓存作用是比较有限, 但是也有用得着地方。..., 才从数据库加载, 也就是说, Load 方法是延迟加载。...NHibernate 二级缓存是可以扩展NHibernate.ControlLib 提供了几个实现, 分别适用于不同场景: NHibernate.Caches.MemCache NHibernate.Caches.Prevalence...include:可选,默认值为all,当取non-lazy时设置延迟加载持久化实例属性不被缓存。 usage:声明缓存同步策略,就是上面说明四种缓存策略。

    44410

    .NETer们,你真的应该了解下EF Core3.x了!

    NHibernate SqlSugar Dos.ORM Dapper PetaPoco EntityFramework EntityFrameworkCore 其中NHibernate使用过第一个...下面认真给.Neter们科普下EFCore新东西,相信你也会爱上。 1 直面O/RM性能差 说到O/RM,很多人会嗤之以鼻,性能差,这是真的?...成也萧何败也萧何,正是因为自动化了数据库操作,该过程是僵硬,会导致在复杂数据库环境下无法保障性能。但这怪O/RM框架?...(5)各种数据库支持 EFCore基本上已经覆盖了市面上全部主流关系型数据库,甚至还支持了内存数据库。一招鲜可以吃遍天了,简直了~ 说到封装框架,不是针对谁,微软独一档!...以上是EFCore中相对其他O/RM框架一些新特性和优势,此外要在开发中应用好EFCore,还有蛮多需要学习,比如数据初始化、Linq查询、复杂查询、延迟加载、惰性加载、级联删除、内置假删除,还有分布式环境下数据一致性

    1K10

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

    1、一个用户可以拥有多个订单 2、一个订单只能拥有一个用户 对于用户来说,不需要每次都加载订单列表,反之订单可能每次都需要加载用户信息。Let's Go: ?...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们映射一切都变得如此简单,先来看看Model吧,用户订单列表,对于用户来说,暂时是不需要排序,所以我们可以使用ISet作为Order...一对多映射,比起一对一来说还相对简单点,默认是延迟加载,如果项目中,有些地方,需要立即加载,我们也可以使用 FetchMode.Eager 来加载。...我们在Output中,能看到NHibernate生成Sql语句,测试也成功,说明我们刚刚是立即加载了Orders属性。...如果您在使用Fluent Nhibernate时候也遇到了问题,可以及时与我联系或求助于Fluent Google Groups。 应“亦续缘”要求,把代码整理了下,发上来,便于大家学习。

    719100

    NHibernate介绍「建议收藏」

    大家好,又见面了,是你们朋友全栈君。 现代化大型项目通常使用独立数据库来存储数据,其中以采用关系型数据库居多。...相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是从特定基类中继承而来。 在NHibernate中不用特殊修饰就可以让对象和持久化层交互。...要注意是所有需要持久化属性必须是虚拟,并且要开启延迟加载,所有数据模型类中公共方法必须是虚拟,哪怕它们并没有包含到映射文件中。 通常来讲,最好把所有的属性都设置为虚拟。...可以借助MyGeneration自动代码工具从数据表生成数据模型和对应映射文件。...,可以一对一地写一个Repository,专注负责相对应实体操作。

    70520

    Entity Framework(EF) 5

    特别是.NET 4.5中 自动使用localDb及SQLServerExpress Spatial types Table Valued Functions 带有多个结果集存储过程 兼容性方面支持Visual...用户可以通过预生成视图来提升性能; 缓存——在对象层次(特别是结合禁用AutoDetectChanges改善DbContext Find()性能),可用缓存有查询计划缓存(Query Plan Caching...EF仍然没有提供二级缓存,不过我们可以参考一些指南进行实现——如CodePlex上示例,以及Julia Lerman文章“Entity Framework与Windows Azure中二级缓存”;...每个类对应一张表(Table-per-Class,简称TPC);其中TPT在查询复杂度及性能方面表现最差; 延迟加载vs.预先加载 (Lazy-vs-Eager loading)。...除了EF之外,.NET开发人员还可以选择一些(开源和商业包括在内)产品有NHibernate 和LightSpeed。

    98970

    NHibernate实践与模式

    NHibernate实践与模式 NHibernate是一款非常优秀O/R mapping开源框架,再还没有.net时候它已经存在于java环境中。...MyGeneration是一款开源代码生成工具,它模块更新比较快而且相对于一些开源项目支持比较多,所以我选它,而没有选择codesmith。...当然还有很多NHibernate开发框架大家可以在www.codeproject.com,www.codeplex.com上找到。...然后再去创建数据库表,和UI部分; 还是按在有数据表情况下如何用NHibernate作开发 1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06...这个模 块他提供可以方便实现1-n,n-1,n-nmapping非常方便使用 2.在项目中加载这些创建好文件建议加载到一个新项目比如BusinessModule。

    81240

    Fluent NHibernate之旅二--Entity Mapping

    如果你要亲手试验一下,可以先看一下“Fluent NHibernate之旅一”,进行一下数据库和SessionFactory准备。...两者之间对比,只有用了以后你才能懂得,只能意传不能言语。对于我这种新手来说,Fluent更适合,因为可以用它来进行学习NHibernate。...当然还有更多方法,如果大家想了解的话,可以看一下Fluent NHibernate API Document。...hbm.xml文件,自己再看一篇,看看NHibernate映射方式,所以是非常好一个方法,有时候做映射时候,遇到问题都会生成出来,随时查看问题所在,所以说是非常有用一个方法,而且你可以把你映射文件直接用到...,也就是Map()时候,想看看Map还有哪些方法,结果就看到了CustomTypeIs() 和 CustomTypeIs() 两个方法,一个使用反射,一个用泛型,强类型,当然会选择后者咯。

    1K90

    NHibernate详解

    大家好,又见面了,是你们朋友全栈君。 什么是NHibernateNHibernate 是一个基于.Net 针对关系型数据库对象持久化类库。...假设你正在为你网站开发一个基本用户管理子系统。我们将使用如下一张User表(假定你已经设置好一个数据库—在例子里称它为NHibernate)。...NHibernate 遵循和.Net Framework同样规则来加载类型。因此如果你在如何指定类型方面有些混淆,请参看.Net Framework SDK。...在一个应用程序产品里,在你特定环境里,推荐配置log4net,并为NHibernate设置一定日志级别。 你还需要配置hibernate.cfg.xml文件: <?...让Configuration知道你将存储何种类型对象 3. 为你选择数据库创建一个Session对象 4. Load,Save和Query你对象 5.

    68730

    NHibernate中对同一个对象Lazyload要设置一致

    NHibernate中出于性能考虑,经常使用Lazyload方式来加载关联对象,关于什么是Lazyload,以及怎么使用,可以参见博客园中文章,比如:http://www.cnblogs.com...但是今天在调用另外方法,然后在调用Flow.Node时,又出现了这个异常,这让十分郁闷,明明指定了Flow.Node是立即加载,那么怎么还是会被系统转换为NodeProxy了呢?...在调用Flow.Node之前,调用了Task对象,所以NHibernate根据TaskMapping设置,将Node设置为动态代理类,同时将Node缓存到了Session中,然后再调用Flow.Node...另外一种办法就是不在Task中引用Node对象,采用是第二种方法,在Task中,其实只需要Task.NodeId就够了,不需要再加载Node对象进来。...总的来说,如果在NHibernate中用到了继承类,如果同时用到了Lazyload,那么在转换类型时就可能抛出异常。解决办法就是将Lazyload取消,改为立即加载

    32220

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

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate书中也相应推荐了使用FN来进行映射配置,之前写FN之旅至今还有很多人会来私信我问题,说来惭愧,从...Sqlite做为我们数据库,ORM最大好处就是我们可以随意变更我们数据库类型,不需要考虑其类型,这是选择Nhibernate原因,EF虽然通过扩展能够支持其他数据库,但我相信用EF使用其他数据库的人很少吧...刚我们测试报错,是因为Employee中Name是个UserName类,NhibernateComponent,在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库,所以上面的测试会报错...Fluent Nhibernate确实是个好东西,让在开发上省去了很多时间,今天虽然介绍了AutoMapping,但我不推荐您在您项目中使用,用起来没手感(个人感觉),需要约定东西太多了,对于数据库结构也得按照他契约来...但在开发一些小工具时,又要用到小型存储数据的话,不妨可以试试这种方式。 PS:今天本来心情不错,没想到有客人来拉横幅,一直在公司吵闹,害无法集中精力,估计在文章中会有错地方,大家见谅了。

    97060

    #1在构造函数内调用虚方法 | TW洞见

    虚方法是.NET中重要概念,可以说在某种程度上,虚方法使得多态成为可能。 然而虚方法使用却存在着很大学问,如果滥用的话势必对程序产生很大负面影响。...这是因为V可以在Base任意子类中被改写(override),而这种改写,很有可能使得它依赖于自己构造函数,如上例所示。...我们能完全避免这么做?很遗憾,答案是不能。比如如果项目中使用了NHibernate,框架本身要求ORM实体类中,所有与数据库列具有对应关系属性都必须为虚属性。...这是因为NHibernate为了实现延迟加载,会为每个实体类生成proxy,这些proxy需要重写实体类中属性getter/setter。...而有些时候,为了业务需要,我们不得不在实体类构造函数中对这些属性进行某些操作(比如初始化)。 认为这么做是技术选型所致必然结果,是完全可以接受

    1.2K110
    领券