NHibernate学习第一天(数据的写入 Insert)

NHibernate入门:从零实现数据库插入操作与实战避坑指南 对象关系映射(ORM)是一种将面向对象编程语言中的对象与关系型数据库中的表进行映射的技术,它通过封装数据库操作,让开发者能够以操作对象的方式操作数据库,从而提升开发效率并降低维护成本。其核心原理在于元数据映射和会话管理,通过配置文件和会话工厂建立对象与表之间的对应关系,并利用工作单元模式跟踪对象状态变化。在技术价值上,ORM框架如NHibernate能够自动生成SQL语句、管理事务、防止SQL注入,并支持延迟加载等高级特性,显著减少了样板代码。典型的应用场景包括企业级应用开发、复杂领域模型的数据持久化以及需 阅读详情

转自:http://www.cnblogs.com/mack/archive/2004/09/01/38636.aspx

曾经了解过Hibernate, 印象很深,是个很不错得O/R Mapping FW. 在http://nhibernate.sourceforge.net/上有个从Java移植过来得.NET版本--NHibernate(以下称NH),不过目前还处于PreAlpha Build 2阶段.
出于兴趣以及学习.NET得目的, 花了两天仅看了很小一部分代码:一来源代码注释并不丰富,二来对于Hibernate/NHibernate的使用也很不熟悉,三来有些知识点还不熟悉.
准备工作如下:
1. NHibernate
2. NUnit
3. NHibernate配置文件 monitoring.dll.config 如下:

 


<? xml version="1.0" encoding="utf-8" ?>
< configuration >
 
< configSections >
   
< section name ="nhibernate" type = "System.Configuration.NameValueSectionHandler,System,Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 
</ configSections >
 
< nhibernate >
   
< add key ="hibernate.show_sql" value ="false" /> <!-- 设置是否输出SQL语句到Console  -->
   
< add key ="hibernate.connection.provider" value ="NHibernate.Connection.DriverConnectionProvider" />
   
< add key ="hibernate.dialect" value ="NHibernate.Dialect.MsSql2000Dialect" /> <!-- 设置使用SQL Server的方言,毕竟不同DB的SQL有或多或少的区别 -->
   
< add key ="hibernate.connection.driver_class" value ="NHibernate.Driver.SqlClientDriver" /> <!-- 设置使用的DB驱动 -->
   
< add key = "hibernate.connection.connection_string" value ="Server=zephyr;initial catalog= argus;UserID=sa;Password=zephyr;Min Pool Size=2" /> <!-- 设置连接串 -->
 
</ nhibernate >
</ configuration >

可以看出以上是一个标准得Config文件,一般由System.Configuration.ConfigurationSettings.GetConfig方法来读取.
蓝色部分才是真正配置NH的地方, 例子中我配置它使用SQL Server, 那些Key/Value的含义很好明白.
值得注意得是,配置文件得文件名很重要,通常对于一个EXE得Assembly来说,是AssemblyName.Config,不过对于Dll Assembly来,对应的配置文件为AssemblyName.dll.config 例如:
MyAssy.exe -> MyAssy.config
MyAssy.dll -> MyAssy.dll.config
我打算在我的monitoring.dll,一个用来监视性能东东中使用NH来持久化数据. 该类库包含了一个TestCase,由NUnit来调用
4.将要被持久化的对象, 即Business Object(BO)

using System;
namespace Argus.Monitoring
{
    
public class Monitor
    
{
      
//dbID & DBID 是NH必须要求的主键
         private int dbID;
        
public int  DBID{set{dbID=value;}get{return dbID;}}
        
public string MonitorType {get{return "dummy monitor";}}
        
public double Value {get{return 12.34;}
        
public string Category{get{return "this is category";}}
        
public string Name{get{return "this is name";}}
        
public string Instance{get{return "this is instance";}}
        
public string Computer{get{return "this is computer";}} 
      }

}

这是一个被极度简化的类,省略了Member Method,甚至Property的set方法,因为我打算先试试Insert功能,然后再尝试Load功能
5. 写一个该BO对应的最简单的映射文件

<? xml version="1.0" encoding="utf-8" ?>
< hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0" >
 
<!-- 指明BO的全名和所在Assembly的名字以及在数据库中对应的表名 -->
 
< class name ="Argus.Monitoring.Monitor,monitoring" table = "record" >
   
< id name ="DBID" type ="Int32" >
     
< generator class ="identity" /> <!-- 在数据库表中 ID列设成自动加一的主键 -->
   
</ id >
   
<!-- 若不设column属性,则默认BO中属性名称和表中字段名一致,若不指明type,则通过反射BO的属性来得到列的数据类型 -->
   
< property name ="Computer" type ="String(50)" />
   
< property name ="Category" type ="String(50)" />
   
< property name ="Name" column ="counter" type ="String(50)" />
   
< property name ="Instance" type ="String(50)" />
    
<!-- 此处BO的Value属性被映射到data列 -->
   
< property name ="Value" column ="data" type ="Double" />
   
< property name ="MonitorType" type ="String(50)" />
 
</ class >
</ hibernate-mapping >

6. 最后一步 (好累啊~~~), TestCase:
 
using System;

using NUnit.Framework;

using NHibernate;

using Argus.Monitoring;



namespace Test.Monitoring

{

      

     [TestFixture]

    
public class MonitoringTest

    
{

         [Test]
public void NHibernateTest ()

        
{

              Argus.Monitoring.Monitor m
=new Argus.Monitoring.Monitor ();

              NHibernate.Cfg.Configuration cfg
=new NHibernate.Cfg.Configuration ();

              cfg.AddXmlFile (
"Argus.Monitoring.Monitor.hbm.xml");

              ISession session
= cfg.BuildSessionFactory ().OpenSession();

              session.Save (m);

              session.Close ();

         }


     }


}

 

Oracle+NHibernate中Guid主键的正确实践方案 Guid(全局唯一标识符)作为分布式系统中常用的ID生成机制,在跨数据库迁移时面临存储类型不匹配、字节序不一致、索引性能下降等共性挑战。其核心原理在于将128位二进制数据以确定性方式序列化为数据库可持久化的形式,技术价值体现在避免单点ID生成器瓶颈、保障微服务间数据一致性,并支持水平扩展。典型应用场景包括金融核心系统的订单主键、日志追踪ID及多租户数据隔离。在Oracle环境中,因缺乏原生GUID类型,必须绕过NHibernate默认映射,转而采用RAW(16)字段配合自定义IUserType与Oracle 阅读详情

相关推荐

Oracle+NHibernate中Guid主键的存储与映射最佳实践

Guid(全局唯一标识符)作为分布式系统常用主键类型,其二进制本质与字符串表示间的转换逻辑,直接影响数据库存储效率、索引性能与数据一致性。在Oracle这类不原生支持Guid的数据库中,配合NHibernate等ORM框架时,若未明确约束序列化格式(如ToString("N"))和存储类型(如VARCHAR2(32)而非默认36字符),极易引发ORA-01461绑定异常、索引失效、大小写不匹配查询失败等问题。技术价值在于统一Guid的生成、传输、存储与比较语义,兼顾性能、可读性与运维友好性;典型应用场景包括

ciyinzhi8788的博客 425

WPF+Nhibernate小项目总结

三三进销存系统项目总结 系统开发主要技术工具简述 本系统开发使用工具为Visual Studio 2010旗舰版,开发语言为C#, 开发平台为.net Frame Work 4,用户界面框架使用WPF,使用Nhibernate数据框架,数据库使用Sql Server 2008 R2,软件体系架构为三层架构(UI表示层,BLL业务逻辑层,DAL数据访问层),日志记录使用log4net,目...

weixin_30348519的博客 180

SqlWithMongo:使用 NHibernate 将 SQL Server 与 MongoDB 结合

使用 NHibernate 将 SQL Server 与 MongoDB 结合 这是一个示例项目,您可以在其中了解如何使用 NHibernate 将 SQL Server 与 MongoDB 结合起来。 你可以在找到它的完整描述 如何开始 为了运行该应用程序,您需要并更改 SQL Server 和 MongoDB 的连接字符串

c# NHibernate 批量插入

1、IQuery.ExecuteUpdate() 2、

HDU6_112的专栏 2993

图像相似度的评价指标 : FID(Fréchet Inception Distance)

FID(Fréchet Inception Distance) 是用来计算真实图像与生成图像的特征向量间距离的一种度量。如果FID值越小,则相似程度越高。最好情况即是FID=0,两个图像相同。 实际计算: 参考链接:https://machinelearningmastery.com/how-to-implement-the-frechet-inception-distance-fid-from-scratch/ # example of calculating the frechet inceptio

weixin_43723625的博客 1万+

操作不能完成 (错误 0x00000709) 共享打印机无法连接解决办法

环境:windows Server 2012 + Win10 客户端 问题:使用计算机名和IP地址可以正常连接打印机,但是使用另外的A记录或CN记录无法连接,报此错误 原因:这是打印服务DNS解析的问题 故障补充:假设你的服务器电脑名称叫print01,但是你又建了一条A记录或者CNname 叫PR01,就会发现使用额外的A记录或CN记录就无法连接 故障截图: 操作不能完成 (错误...

瑞哥的博客 3万+

NHibernate官方文档中文版——批量插入(Batch inserts)

A naive approach t7o inserting 100 000 rows in the database using NHibernate might look like this: 一个简单的使用NHibernate来向数据库插入100000条记录的操作的方式也许是这样子的: ISession session = sessionFactory.OpenSession(); ...

weixin_30535843的博客 837

Cocos Creator发布微信小游戏:深度定制与去除默认加载页面的实践指南

本文详细介绍了如何使用Cocos Creator发布微信小游戏时去除默认加载页面的实践方法。通过修改构建配置和重写启动逻辑,开发者可以自定义加载体验,提升品牌一致性。文章还提供了进阶优化方案和常见问题解决方案,帮助开发者实现更专业的微信小游戏发布流程。

weixin_27972919的博客 568

NHibernate执行存储过程

既然要学习NHibernate,那知道如何执行存储过程自然是必不可少的,网上有很多资料是用新建映射文件的方式在NHibernate中执行存储过程,我个人觉得这真的不太好,反复琢磨后搞出了下面的这种方式,希望对大家有帮助。 一、NHibernate执行insert存储过程(无返回值) CREATE PROCEDURE [dbo].[proc_AddSysDict] @Id uniqueide...

xiaouncle的博客 978

从混乱到清晰:用QJsonObject重构你的Qt网络API数据解析层(避坑指南)

本文详细介绍了如何使用QJsonObject重构Qt网络API数据解析层,避免常见的JSON解析陷阱。通过安全解析模式、数据绑定和性能优化技巧,帮助开发者构建高效、健壮的解析逻辑,提升代码可维护性和可读性。特别适用于处理复杂嵌套的JSON响应数据场景。

weixin_29011667的博客 230

51单片机——LCD12864驱动函数深度解析与实战优化

本文深入解析了51单片机驱动LCD12864液晶屏的核心驱动函数,从底层时序、关键延时到地址计算进行逐行剖析,并针对常见显示问题提供系统性的调试技巧与实战优化方案。重点探讨了如何将基础代码优化为稳定高效的驱动,涵盖延时精准化、批量写入及显示缓冲区等高级技巧,旨在帮助开发者从“点亮”屏幕进阶到“精通”驱动,确保显示稳定可靠。

weixin_29190169的博客 84

四、NHibernate之insert、delete、update操作

前言NHibernate的插入、删除、修改操作都很简单,下面列出的例子可以很容易的理解,但是其中的数据请根据实际情况来做相应的修改。 一、新增数据DAL中新增代码如下:        public int CreateCustomer(Customer customer)        {            int newId = (int)session.Save

soldierluo的专栏 4004

RK3588芯片:ALSA音频通路下HDMI与耳机自动切换的技术探索

摘要:本文详细探讨了基于RK3588芯片的HDMI与耳机自动切换方案。文章首先剖析了ALSA音频架构的核心组件与工作原理,接着介绍了RK3588芯片的硬件特性及音频处理优势。重点阐述了自动切换的实现原理,包括硬件检测机制、ALSA驱动处理逻辑和软件控制流程,并提供了详细的配置步骤。同时针对常见问题如切换异常、音频质量下降等给出了解决方案。该方案通过合理配置设备树和ALSA文件,实现了音频输出的智能切换,提升了用户体验,展现了RK3588在音频处理领域的强大性能。未来随着AI音频技术的发展,该方案在智能家居、

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 266

Nhibernate系列学习之(四) 数据操作

数据操作,在这里主要介绍INSERT、UPDATE、DELETE。我们在使用NHibernate的时候,如果只是查询数据,不需要改变数据库的值,那么是不需要提交或者回滚到数据库的。 一、INSERT   通过调用ISession.Save()方法,然后同步同步到数据库。   Program.cs class Program { stat...

103

弥散圆以及最大弥散圆

1弥散圆的形成? 原本景物中的一点应该经过透镜本应该也是一点才对。但是因为离焦,球差的存在,最终成像会投影成一个光斑圆圈。越小越清晰,越大就互相干涉变得越模糊。 同时人们规定二零最大弥散圆,就是人眼能够感受清晰模糊的一个边界,直径大于它,感受到模糊;直径小于它,感受不到模糊。 下面分别是离焦(左),球差(右)。 2弥散圆大小怎么计算呢? ,f为焦距;<1> ,D为光圈有效孔径;<2> F=f/D; <3> 3条公式合并可得出: ...

camerall 3114

漏检率从23%降至1.3%:YOLOv8交通车辆计数与违章识别完整落地方案

本文分享了基于YOLOv8+ByteTrack的交通视频分析系统实战经验,针对车辆计数和违章识别两大核心功能,提出了完整的工程化解决方案。系统采用边缘计算架构,单张GTX 1660即可稳定处理8路1080P视频流,实现了白天98.7%、夜间96%以上的车辆计数准确率。文章详细剖析了交通视频分析的四大落地痛点,系统架构设计思路,以及遮挡处理、光照适应、多路并发等关键技术优化方案,重点介绍了车辆计数三重校验机制和三类违章识别的工程实现细节。通过ROI裁剪、TensorRT加速、动态抽帧等优化手段,显著提升了系统

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 338

NHibernate 之数据操作 (第五篇)

NHibernate 之数据操作 (第五篇)   数据操作,在这里主要介绍INSERT、UPDATE、DELETE。我们在使用NHibernate的时候,如果只是查询数据,不需要改变数据库的值,那么是不需要提交或者回滚到数据库的。 一、INSERT   通过调用...

ajwqb06628的专栏 190

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NHibernate的一个小问题

 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 表名 中的标识列插入显式值我使用NHIbernate向数据表中 插入数据时,出现这样的一个异常,后来吧UID放到数据表的第一列,插入成功,可以知道,NHIbernate把数据表的第一列作为标识列,所以应该把uid发到第一列

njj10的专栏 5211

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NHibernate集合映射原理与高性能实践指南

ORM集合映射是对象关系映射的核心难点,本质源于面向对象的双向聚合关系与关系型数据库单向外键模型之间的语义鸿沟。其设计原理直接影响延迟加载行为、N+1查询风险及领域模型纯洁性。技术价值在于平衡透明持久化与性能可控性,避免因集合操作触发意外全量加载或破坏双向一致性。典型应用场景包括订单-明细同步、患者-检查报告关联、课程-章节-课件树形结构等中大型.NET业务系统。本文聚焦NHibernate集合映射、延迟加载开销两大热词,结合LINQ to SQL对比与自定义集合类型实践,提供可落地的读写分离、超惰性加载(

diaojin6880的博客 406

无废话入门Nhibernate【什么是Nhibernate】

Nhibernate是什么? 要想理解Nhibernate,首先要明白什么是ORM。ORM--对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库中。Nhibernate就是:.Net环境下实现ORM的技术的一个框架!

想到,做到,得到 1800

NHibernate.Exceptions.GenericADOException

捕捉到 NHibernate.Exceptions.GenericADOException Message="could not insert: [Com.Ritu.CSDDT.Model.BookEntity][SQL: INSERT INTO book (NAME, BREF_DESC, DESCRIPTION, UPDATE_TIME, AUTHOR, PUBLISH_COMPANY,

一方晴空的专栏 8719

NHibernate与返回受影响的行计数的冲突

案例:使用NHibernate新增、编辑或删除数据表TabelA中的一条记录,此表有相应触发器,触发器如下: create TRIGGER tr_A ON TableA AFTER INSERT,DELETE,UPDATE AS BEGIN insert into TableB values('1','a'); END NHibernate将出现异常,异常信息为:Unexpected row count: 2; expected: 1

开享 1011

NHibernate Interceptor深度解析:数据流监控与事件驱动架构

ORM(对象关系映射)是.NET数据访问的核心范式,其本质在于协调内存对象与持久化存储之间的状态同步。理解Interceptor机制,需回归其底层原理:它并非AOP式代理增强,而是嵌入NHibernate Session生命周期的原生钩子,提供OnLoad、OnSave、OnDelete和PostFlush四大零延迟监听点,实现对数据加载、变更、销毁及落库后状态的全链路可观测性。这种设计赋予ORM以事件驱动能力,支撑缓存一致性、审计日志、全文索引更新等关键工程价值,在高并发场景下显著优于EF Core Ch

aobai7842的博客 424

NHibernate问题求大神解决!!!

这是我定义的实体类 对应的数据库表 映射文件 数据访问层写的是插入语句 错误: 捕捉到 NHibernate.Exceptions.GenericADOException HResult=-2146232832 Message=could not insert: [DaYou.Yun.Entity.Entities.SubscriptionEntity][SQL...

416

could not insert into NHibernate数据库问题解决

今天在做NHibernate时老出现一个could not insert into 数据库的异常,在网上查阅资料后发现是在<generator class="native" />配错了,这个配置默认的是数据库表中主键字段自增,而我的表在设计时不是自增的,在添加数据的时候还给主键Id赋了值,所以导致这种错误。现将class 各种配置意义举例如下: 1、identity:用于MyS...

weixin_33758863的博客 397
上一篇: SQLite基本语法手册
下一篇: Duwamish 7.0 系列分析文章
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值