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

可以从NHibernate实体的构造函数中调用虚拟属性吗?

在云计算领域,NHibernate是一个广泛使用的对象关系映射(ORM)框架,用于将关系数据库表中的数据映射到应用程序中的对象。在这个问答内容中,我们将探讨是否可以从NHibernate实体的构造函数中调用虚拟属性。

首先,我们需要了解NHibernate实体的构造函数和虚拟属性。构造函数是在创建对象时自动调用的特殊方法,用于初始化对象。虚拟属性是指使用关键字virtual声明的属性,它允许子类重写该属性的实现。在NHibernate中,虚拟属性可以用于实现延迟加载和代理对象。

在NHibernate实体的构造函数中直接调用虚拟属性是不推荐的,因为这可能导致意外的行为和错误。当NHibernate创建代理对象时,它会使用构造函数创建实例,然后在需要时延迟加载属性。如果在构造函数中调用虚拟属性,可能会导致属性在代理对象创建时被提前加载,从而导致性能问题。

为了避免这种情况,应该避免在NHibernate实体的构造函数中调用虚拟属性。相反,应该在需要使用这些属性的地方使用延迟加载,并确保代理对象已经初始化。

推荐的腾讯云相关产品:

  • 腾讯云数据库:提供MySQL、PostgreSQL等关系数据库服务,可以与NHibernate一起使用。
  • 腾讯云COS:提供云存储服务,可以用于存储和检索数据,与NHibernate实体的构造函数中调用虚拟属性无关。
  • 腾讯云CLB:提供负载均衡服务,可以用于优化应用程序性能和可扩展性,与NHibernate实体的构造函数中调用虚拟属性无关。

总之,在NHibernate实体的构造函数中调用虚拟属性是不推荐的。应该避免这种做法,并在需要使用虚拟属性时使用延迟加载。腾讯云提供了多种相关产品和服务,可以与NHibernate一起使用。

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

相关·内容

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

我们在构造函数调用虚方法,碍着ReSharper什么事儿了? 其实这个警告就是提醒我们不要在非封闭类型构造函数调用虚方法或虚属性。但为什么这样做不合适呢?在解惑之前,我们先来了解两个概念。...我们能完全避免这么做?很遗憾,答案是不能。比如如果项目中使用了NHibernate,框架本身要求ORM实体,所有与数据库列具有对应关系属性都必须为虚属性。...这是因为NHibernate为了实现延迟加载,会为每个实体类生成proxy,这些proxy需要重写实体属性getter/setter。...而有些时候,为了业务需要,我们不得不在实体构造函数对这些属性进行某些操作(比如初始化)。 我认为这么做是技术选型所致必然结果,是完全可以接受。...但我们要注意,在代码中保证那些可能会被继承实体,在子类重写那些虚属性时,不要依赖于子类自身构造函数(这几乎是可以保证,因为与数据库列映射属性,只能是最简单getter/setter)。

1.2K110

NHibernate介绍「建议收藏」

相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是特定基类中继承而来。 在NHibernate不用特殊修饰就可以让对象和持久化层交互。...要注意是所有需要持久化属性必须是虚拟,并且要开启延迟加载,所有数据模型类公共方法必须是虚拟,哪怕它们并没有包含到映射文件。 通常来讲,最好把所有的属性都设置为虚拟。...可以借助MyGeneration自动代码工具数据表生成数据模型和对应映射文件。...id元素告诉NHibernate哪个数据库字段和对应对象作为一个唯一键来使用。在本例,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体来创建唯一ID。...,可以一对一地写一个Repository,专注负责相对应实体操作。

70320
  • Fluent NHibernate之旅二--Entity Mapping

    本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate实体映射(Entity Mapping)做非常好,虽然不是完美,但一些我们经常使用,基本上已经都支持了,而且配置也相对比较简单...类,然后在构造方法完成映射方法,就能完成传统方式映射了。...映射方式很简单吧,相信大家都能看懂吧,为什么会如此方便呢?这其实就是完全靠了Lambda表达式,大家可以看看老赵.NET框架中委托写法演变谈开去”,就非常清楚了。...回答是当然需要,因为我们这里属性名与表主键名是相同,所以没有进行设置,如果你数据库主键名是ID,这里我们只需要Id(m => m.ProductID).ColumnName(“ID”),你可以看到上述映射中...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关资料,在此也不多说,就说说Fluent方式吧,在我映射自定义属性时候

    1K90

    NHibernate 缓存

    , 只有第一次调用 Get 方法加载实体类时, 有 sql 输出, 数据库取出了数据, 第二次加载则没有 sql 数据, 也就是利用了 session 一级缓存。...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] After Get Category 输出可以看到, 调用 Get 方法之后, Nh 立刻数据库加载实例...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] 1, Beverages 可以看出, 调用完 Load 方法之后, nh 并没有立即从数据库加载实体, 而是等到读取实体属性时...也可以实体 hbm 映射文件配置使用二级缓存, 不过在 hibernate.cfg.xml 文件中统一配置是推荐做法。...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] 测试用例输出可以看出, 二级缓存时可以在不同 session 之间共享。

    60311

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

    ,默认情况Property 读取 default-lazy:可选,默认是true,是否启动延迟加载 1.2 class配置 一般情况下,class节点只需要指定name和table就可以了。...class="generatorClass"/> name : 对应属性名 type:对应NHibernate类型 column:列名 generator:主键生成器,如果不需要参数可以直接在..." type="typename" /> name :类里属性名 column:对应数据表列名 type:数据库类型 1.2.3 many-to-one 在Nhibernate...,不同地方在于一对一需要在双方映射关系里均要维护,在有外键表/实体 添加 constrained=“true”。...首先,创建一个泛型模板类,并约束泛型为类: public class Repository where T: class { } 添加一个ISession属性,用来后续访问操作,并由构造方法赋值

    1.1K20

    NHibernate 缓存

    , 只有第一次调用 Get 方法加载实体类时, 有 sql 输出, 数据库取出了数据, 第二次加载则没有 sql 数据, 也就是利用了 session 一级缓存。...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] After Get Category 输出可以看到, 调用 Get 方法之后, Nh 立刻数据库加载实例...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] 1, Beverages 可以看出, 调用完 Load 方法之后, nh 并没有立即从数据库加载实体, 而是等到读取实体属性时...也可以实体 hbm 映射文件配置使用二级缓存, 不过在 hibernate.cfg.xml 文件中统一配置是推荐做法。...[CategoryID]=@p0; @p0 = 1 [Type: Int32 (0)] 测试用例输出可以看出, 二级缓存时可以在不同 session 之间共享。

    44310

    NHibernate 代码映射实体

    NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外一种映射方式, 由于推出时间比较晚, 所以资料相对比较少, 而且与社区版...下面就通过一个实例来说明怎么使用 NHibernate 自带代码映射。 实体关系 要映射类关系图如下: ?...; 标识映射 使用 Id 函数映射标识, NHibernate 提供了内置工具类来简化代码: Id( m => m.Id, map => { map.Column("id...使用 Property 函数映射属性NHibernate 提供了内置工具类来简化代码: Property( m => m.Name, map => { map.Column...Attribute Mapping 相比, 对原来 POCO 实体类没有污染 (Attribute) ; NHibernate 自带, 可以说是一等公民, 而 Fluent Mapping 是第三方维护

    90410

    NHibernate学习笔记之一,Hello world!

    :http://sourceforge.net/projects/nhibernate/files/,如果嫌麻烦,可以下载本文示例,中间包含了NHibernate。...文件夹对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate配置信息适当修改 。...,该文件必须输出到Bin目录,否则会报错“xxx is not mapped”,如图3所示具体方法是:选择User.hbm.xml文件->属性->生成操作,设置这个属性值为“嵌入资源” 图3 5...、定义NHibernateHelper帮助类,Isession是NHibernate工作单元,它是一个持久化管理器,我们通过ISession来数据库存取数据。...NHibernate通过对Configuration().Configure()调用来装载配置文件,并初始化成一个Configuration实例,一般ISessionFactory通常只是被初始化一次

    60020

    NHibernate总结

    ,其中People实体字段要设置为virtual。每个文件详细代码在下面介绍 (2)     在NH.Data层引用Nhibernate相关DLL ?...我们可以在该文件上点击右键选择属性进行修改。 (2)     NHibernateHelper.cs数据操作辅助类 我们现在可以开始NHibernate了。...首先,我们要从ISessionFactory获取一个ISession(NHibernate工作单元)。ISessionFactory可以创建并打开新Session。...ISessionFactory通常是个线程安全全局对象,只需要被实例化一次。我们可以使用GoF23单例(Singleton)模式在程序创建ISessionFactory。...这正是NHibernate映射文件发挥作用地方。映射文件包含了对象/关系映射所需元数据。元数据包含持久化类声明和属性到数据库映射。

    92540

    Java 最常见 208 道面试题:第十二模块答案

    实体可以被定义为 final ?...openSession 字面上可以看得出来,是打开一个新session对象,而且每次使用都是打开一个新session,假如连续使用多次,则获得session不是同一个对象,并且使用完需要调用close...124. hibernate 实体类必须要有无参构造函数?为什么?...必须,因为hibernate框架会调用这个默认构造方法来构造实例对象,即Class类newInstance方法,这个方法就是通过调用默认构造方法来创建实例对象。...另外再提醒一点,如果你没有提供任何构造方法,虚拟机会自动提供默认构造方法(无参构造器),但是如果你提供了其他有参数构造方法的话,虚拟机就不再为你提供默认构造方法,这时必须手动把无参构造器写在代码里,否则

    71530

    Nhibernate_nhibernate与ef区别

    步骤2:创建.Net类: 当我们这样一堆用户时候,我们需要某种对象来保存.NH是通过reflection对象属性来工作,所以我们给需要持久化对象添加属性.一个对应于上面数据库结构可以写成这个样子...lastLogon; } set { lastLogon = value; } } } } 在上面的代码里面,我们把属性构造函数写成了...机制不同引起-zyyang).这种情况下,我们是Assembly NHibernate.Demo.QuickStart载入NHibernate.Demo.QuickStart.User类..NH...name"属性值就是我们写.Net类属性,column属性值就是在数据库与'Net类属性对应字段名.type属性是可选(如果你没有标明,NH会给出一个最适合),但是推荐做法是带上这个属性...更好是,你可以数据库查询到一个System.Collections.IList: IList userList = session.CreateCriteria(typeof(User)).List

    59330

    2022年了有哪些值得推荐.NET ORM框架?

    它解决了对象和关系型数据库之间数据交互问题,ORM作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体操作业务对象时候,就不需要再去和复杂SQL语句打交道,只需简单操作对象属性和方法...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入类型映射,比如...PgSql 数组类型等; 支持 丰富表达式函数,以及灵活自定义解析; 支持 导航属性一对多、多对多贪婪加载,以及延时加载; 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁; 支持 MySql/...只要您连接处于打开状态,就可以对您数据库调用任何操作。 高性能- 它缓存已经生成编译表达式以供将来重用和执行。它了解您架构以创建最佳编译表达式 AOT。...内存高效- 它提取并缓存您对象属性、执行上下文、对象映射和 SQL 语句。它在整个转换和执行过程重用它们。 动态和混合- 它提供了成熟 ORM 一些高级功能。

    5.9K11

    Nhibernate入门与demo

    通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库。      而Nhibernate就是:.Net环境下实现ORM技术一个框架!     ...告诉你吧,session是我们只需要一个配置文件就可以随处调用了。这么神奇?      Nhibernate带给我们就是:对于开发者通常数据持久化相关编程任务,解放其中95%!...第三个问题:      这是本文关键,是怎么搭建呢?      先看项目整体图,作为初学demo 没有层次,没有优化,只是作为入门一个简单介绍!      第一步:设计数据库表。...然后对应数据库表名。设置延迟加载为false。具体可以参考Nhibernate官方文档。 3、一定要将这个文件属性:生成操作设置为嵌入资源!     ...第四个问题:         使用和测试你配置【可以爽一把了!】

    35330

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

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

    96960

    NHibernate实践与模式

    NHibernate实践与模式 NHibernate是一款非常优秀O/R mapping开源框架,再还没有.net时候它已经存在于java环境。...(select,insert,update,delete),也可以通过xml文件配置作自定义查询,或是调用存储过程。...CURD操作语句可以源代码看,它是生成是参数形势sql脚本并且支持特别的参数,如,oracleto_date,to_char等; 从上图可以看出实现了数据库无关性,开发人员无须关心底层数据库类型...当然也可以反过来。先把业务实体抽象出来,包括需要实现功能,操作,返回信息,通过对业务实体。...然后再去创建数据库表,和UI部分; 我还是按在有数据表情况下如何用NHibernate作开发 1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06

    81240

    ABP入门系列(3)——领域层定义仓储并实现

    针对NHibernate,提供了NhRepositoryBase泛型版本实现方式。...泛型版本实现就意味着,大多数时候,这些方法已足已应付一般实体需要。如果这些方法对于实体来说已足够,我们便不需要再去创建这个实体所需仓储接口/类。...直接通过在应用服务层定义仓储引用,然后通过构造函数注入即可。...这里要显示声明实现类有参构造函数,使用泛型IDbContextProvider将数据库上下文子类ChargeStationContext传给父类构造函数。 ?...三、仓储注意事项 仓储方法,ABP自动进行数据库连接开启和关闭。 仓储方法被调用时,数据库连接自动开启且启动事务。 当仓储方法调用另外一个仓储方法,它们实际上共享是同一个数据库连接和事务。

    99290

    2022年了有哪些值得推荐.NET ORM框架?

    它解决了对象和关系型数据库之间数据交互问题,ORM作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体操作业务对象时候,就不需要再去和复杂SQL语句打交道,只需简单操作对象属性和方法...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入类型映射...,比如 PgSql 数组类型等; 支持 丰富表达式函数,以及灵活自定义解析; 支持 导航属性一对多、多对多贪婪加载,以及延时加载; 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁...只要您连接处于打开状态,就可以对您数据库调用任何操作。 高性能- 它缓存已经生成编译表达式以供将来重用和执行。它了解您架构以创建最佳编译表达式 AOT。...内存高效- 它提取并缓存您对象属性、执行上下文、对象映射和 SQL 语句。它在整个转换和执行过程重用它们。 动态和混合- 它提供了成熟 ORM 一些高级功能。

    3.8K20

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

    支持 Join 查询、Union all 、Subquery 支持配置查询 支持 DbFirst 数据库导入实体类,或使用生成工具。...EF有三种使用场景: 1、数据库生成Class。 2、由实体类生成数据库表结构。 3、通过数据库可视化设计器设计数据库,同时生成实体类。...没有更改跟踪,因此您必须自己进行管理,但从积极方面来说,您可以获得更多控制权并更快地访问您数据。 换句话说LINQ to DB 是类型安全 SQL。...插入/删除/更新/保存和 IsNew 辅助方法 分页请求会自动计算出总记录数并获取特定页面。 简单交易支持。 更好参数替换支持,包括对象属性获取命名参数。...(V5) 用于记录异常、安装值转换器和将列映射到没有属性属性挂钩。

    4.1K42
    领券