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

NHibernate中文帮助文档:.NET ORM框架全面指南 本文还有配套的精品资源,点击获取 简介:NHibernate是.NET环境下的一个开源对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以使用面向对象的方式处理数据。此文档为开发者提供了NHibernate的详细使用指南,涵盖安装、配置、实体类映射、会话和事务管理、查询语言及Criteria查询、缓存策略、事件和拦截器、懒加载与即时加载、多态性和继承、高级映射特性和... 阅读详情

一、Nhibernate是什么?

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

二、Nhibernate能做什么?

    使用Nhibernate前,我们数据操作主要用在D层,将数据的插入直接拼成sql字符串,然后去操作数据库。如下:

INSERT INTO table_name(列1, 列2,...) VALUES (值1, 值2,....)

SELECT * FROMtable_name

UPDATE Person SETFirstName = 'Fred' WHERE LastName = 'Wilson'

DELETE FROM table_nameWHERE 列名称 = 值

    使用Nhibernate后:

Entity my Entity =newEntity();//Entity初始化........

session.Save(myEntity );//保存一个用户

session.Update(myEntity );//更新用户

session.Delete(myEntity );//删除用户

Entityuser =session.Get<Entity>(Id) as Entity;//根据主键获取用户的 用户实例

    注:这里的Entity,代指所有不同的实体,想保存哪个实体写具体的实体就可以了。

    当对数据进行再次操作的时候,只需用session将初始化好的实体进行增删查改就OK了。

三、怎么搭建一个Nhibernate程序

    下图是建立一个使用基础的Nhibernate的Demo,所有文件如图示:


创建过程如下:

第一步:创建dog实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Model
{
    public class Dog
    {
        private string id;
        private string name;
        private string sex;
        private string weight;

        public Dog()
        {
        }

        public virtual string Id
        {
            get { return id; }
            set { id = value; }
        }

        public virtual string Name
        {
            get { return name; }
            set { name = value; }
        }

        public virtual string Sex
        {
            get { return sex; }
            set { sex = value; }
        }

        public virtual string Weight
        {
            get { return weight; }
            set { weight = value; }
        }
    }
}

第二步:创建Dog类的映射文件 命名规则:xxx.hbm.xml ,我们写作Dog.hbm.xml 代码如下:

<?xmlversion="1.0" encoding="utf-8" ?>
<hibernate-mappingxmlns="urn:nhibernate-mapping-2.2" namespace="Model"assembly="Model">
  <class name="Dog"table="Dog">
    <id name="Id">
      <column name="DogId"sql-type="char(32)" />
      <generator class="assigned"/>
    </id>
    <property name="Name">
      <column name="Name"length="16"  />
    </property>
    <property name="Sex" />
    <property name="Weight" />
  </class>
</hibernate-mapping>


注意该文件的属性设置如下


第三步:创建Nhibernate的配置文件:hibernate.cfg.xml   代码如下:  

<?xmlversion="1.0" encoding="utf-8" ?>

<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">

  <session-factory>

    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

    <property name="connection.connection_string">

     Server=(local);uid=sa;pwd=123456;database=quickstart //将该属性的填写改成你自己的数据库连接符

    </property>

    <property name="hbm2ddl.auto">update</property>

    <mapping assembly="Model"/>

  </session-factory>

</hibernate-configuration>

第四步:使用和测试

我们在web层引入两个dll文件,NHibernate.ByteCode.LinFu、NHibernate,

引入以下命名空间:

using NHibernate;

using NHibernate.Cfg;

执行以下代码:

	ISession session =NHibernateHelper.GetCurrentSession();
	ITransaction tx =session.BeginTransaction();

	Dog prince = new Dog();

	prince.Id = "DogId";
	prince.Name = "prince";
	prince.Sex = "男";
	prince.Weight = "60";

	session.Save(prince);

	tx.Commit();

	NHibernateHelper.CloseSession();

 这里为了保证程序里只用一个session,还加了一个 NHibernateHelper,其代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate;
using NHibernate.Cfg;
using System.Web.UI;
namespace QuickStart

{
    public sealed class NHibernateHelper
    {
        private const string CurrentSessionKey= "nhibernate.current_session";
        private static readonly ISessionFactorysessionFactory;
 
        static NHibernateHelper()
        {
            sessionFactory = newConfiguration().Configure().BuildSessionFactory();
        }
		
        public static ISessionGetCurrentSession()
        {
            HttpContext context =HttpContext.Current;
            ISession currentSession =context.Items[CurrentSessionKey] as ISession;

            if (currentSession == null)
            {
                currentSession =sessionFactory.OpenSession();
               context.Items[CurrentSessionKey] = currentSession;
            }
            return currentSession;
        }
        public static void CloseSession()
        {
            HttpContext context =HttpContext.Current;
            ISession currentSession =context.Items[CurrentSessionKey] as ISession;

            if (currentSession == null)
            {
                // No current session
                return;
            }
            currentSession.Close();
            context.Items.Remove(CurrentSessionKey);
        }
        public static voidCloseSessionFactory()
        {
            if (sessionFactory != null)
            {
                sessionFactory.Close();
            }
        }
    }
}

看数据库里是不是已经有了一张Dog表,而且一条数据已经插入到了表中,真得so easy!



超详细Tokenizer——文本训练数据预处理 Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。 阅读详情

相关推荐

FFmpeg 部署与使用(含Docker部署)

ffmpeg 部署以及使用

weixin_38584583的博客 910

ORM框架之NHibernate

使用NHibernate的API来查询和操作数据库非常简单。ISession接口提供了各种方法来执行各种数据库操作,包括插入、更新、删除和查询数据。使用NHibernate的API,您可以轻松地将.NET应用程序与关系型数据库集成起来。

Documentlv的博客 1430

AI Agent技术架构与规模化应用:2025年技术深度解析

2025年,AI Agent(人工智能智能体)迎来了规模化应用的拐点时刻。根据Gartner等权威机构预测,企业软件中整合自主型AI的比例将从2024年的不足1%跃升至2028年的33%。本文深入剖析AI Agent的核心技术架构,从规划模块、记忆模块、工具调用模块到底层实现原理,结合Python和Go语言的实际代码示例,全面阐述AI Agent的技术实现路径。同时,本文探讨多智能体协作系统、企业级部署架构以及未来的技术演进方向,为开发者和技术决策者提供系统性的技术参考。关键词:AI Agent、大语言模型

shao.bing的专栏 1348

Nhibernate介绍与使用

NHibernate简介 NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 NHibernate下载地址:NHibernate 添加MySql.Data和NHibernate引用 ...

cchoop的博客 1万+

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java 小博是新城小学二年级学生,这孩子人很老实,数学、语文成绩都是中等。不过一旦坐在电脑前,写起代码来,则有些霸气侧漏,尤其擅长各种暴力方法。本题就是数学莫老师的题目之一,请你和小博一起暴力求解吧。 输入格式: 第一行给出这个和N(图中例子的和N为2000)。 输出格式: 第一行输出所有解的数目K,随后K行按照DCBA 4位数字从...

qryzhfj的博客 2187

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计

在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。

weixin_32296621的博客 358

NHibernate重要概念的解释和说明

NHibernate 是一个面向.NET环境的对象/关系数据库映射工具。 对象/关系数据库映射(object/relational mapping (ORM)) 这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 ISession 是一个 持久化管理器, 我们通过ISession来从数据库中存取表。 ISessionFact

bcbobo21cn的专栏 1282

实战指南 | 快速修复Adobe Acrobat 2020安装过程中的常见注册表错误

本文提供了Adobe Acrobat 2020安装过程中遇到“无法打开键”注册表错误的详细修复指南。通过安全编辑注册表,精准定位并删除残留键值,可快速解决此常见安装报错,确保软件顺利安装。同时,文章也介绍了其他安装问题的应对策略与预防措施。

weixin_29200485的博客 561

NHibernate简介

 NHibernate简介 - 什么是NHibernate NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本. NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码 里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西. 开发过程

lee576的专栏 1524

LVGL 丝滑菜单3(Silk Menu)

h。

摸鱼专家 90

【深度学习新浪潮】2025年末AI产业动态:泡沫争议、技术突破与2026投资机会解析

2025年末的AI产业在波动中完成了阶段性调整,技术突破与政策支持构筑了长期成长基石,而结构性分化与风险隐患则要求投资者更加精准地把握机会。2026年作为“风险资产的黄金年”,AI全产业链将持续成为资本聚焦的核心,无论是算力国产化的技术突破,还是应用场景的规模化落地,都有望催生一批优质企业。投资者需立足产业阶段特征,理性看待短期波动,聚焦核心技术与政策红利,方能在AI产业的成长浪潮中把握确定性机会。

专注:太空算力、AI infra、异构调度、大模型成本工程 1809

八、NHibernate关系之——多对多

多对多关系废话不多说,看图:这里我们主要是要解决Order表和Product表之间的多对多的关系,相信有过数据库设计经验的人是很容易理解的,OrderProduct是一个关系表,而Order和Product表都是实体表,在数据库中多对多的的实体关系都通过在两个实体间增加一个关系表来解决,如下: 通过在NHibernate中配置Order和Product之间的关系,我们可

soldierluo的专栏 1万+

基于未来出行解决方案的场景实例:城市空中交通(UAM)的飞行路径规划与避障

本文介绍了使用Simulink进行城市空中交通(UAM)飞行路径规划与避障的仿真方法。主要内容包括:1)UAM系统架构与核心挑战;2)详细建模步骤,从城市3D环境构建到飞行器动力学模拟;3)全局路径规划(A*/RRT*)和局部避障(DWA/APF)算法实现;4)多机协同与冲突解决;5)关键场景仿真与性能评估;6)高级功能拓展方向。通过Simulink的数字孪生系统,可有效验证UAM在复杂城市环境中的可行性,为未来立体交通发展提供技术支撑。

xiaoheshang_123的博客 257

Nhibernate+SQLite 入门实例指南一

    Nhibernate+SQLite 实例指南 前言 (注:这一章基本上全是废话,大家可跳过不看) Nhibernate 是最近比较流行的一个源自于Java Hibernate的ORM工具,网上也有许多高水平的关于Nhibernate的文章,但是对于初学者来说,还是比较希望看到一些带有人门性质的初学者文章。我曾在自己的Blog(http://www.cnblogs.com/9527...

weixin_34248258的博客 224

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NHibernate中使用NLog

话说以前的NHibernate版本与Log4Net紧密集成,在群众们千乎万唤之下终于将Log4Net下分离了出来,在NH3本中引入了ILoggerFactory接口,现在我们可以使用其它的Log框架作为NH3的日志记录工具。现在我打算将NLog作为NHibernate的日志工具。这里提供本文章的代码:代码下载 废话少说,直奔主题,通过以下三步就可以让NHibernate 3使用NLog: 1.提...

从心所欲,不逾矩 197

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NHibernate入门初学者-先睹为快

NHiernate相信大家都非常熟悉,可能没用过,但是至少大家都听说过。这系列的文章也层出不穷,也就是我们经常所说的orm的应用,也正是面向对象开发的表现。NHibernate集成了java的Hibernate优点而又体现了.net的长处可以说是宠于一身,那么就更加激起了我对NH

金培龙(Long_carol)的专栏 1110

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

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

NHibernate 级联问题

转贴于: http://www.cnblogs.com/smartcoder/archive/2010/05/20/1739363.html 在用NHibernate碰到一个级联操作问题,在各位大侠的帮助下总算是给搞清楚了,好了废话不说,看问题。  Customer对多个Order,典型的一对多关系,代码如下,不多讲。  1     public class Cust

lingxyd 的专栏 2346

NHibernate 备忘(一) 级联问题

在用NHibernate碰到一个级联操作问题,在各位大侠的帮助下总算是给搞清楚了,好了废话不说,看问题。 Customer对多个Order,典型的一对多关系,代码如下,不多讲。 1 publicclassCustomer 2{ 3ISet<Order>_orders=newHashedSet<Orde...

dianpian0231的专栏 216

[原创]Fluent NHibernate之旅

ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失为一个经典,对于新手的我们,需要完全掌握还需要很长一段路,对于新手来说,最初的配置是非常头大的一件事情,好在老赵推荐一

James.Ying 797

大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)

如果你没听过Nhibernate or NUnit,那么,恭喜你,和我一样,握个手吧。如果你已经是个老酱油了,那就道不同不带你玩了,请自觉绕行,,,。谨以此文献给像我这样广大的小白同胞们(鼓掌)! 话说2013年某月某日,听一武林前辈提起 NHibernate ,小白我顿时大脑空白,这是个啥么东东啊,在强烈好奇心的驱使下,我决定先去吃晚饭,回来后便将此事忘掉了,。。。在此我只想说一句:我不是故意

一个程序猿的故事 8297

Fluent NHibernate之旅

ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失为一个经典,对于新手的我们,需要完全掌握还需要很长一段路,对于新手来说,最初的配置是非常头大的一件事情,好在老赵推...

weixin_33743661的博客 122

[Nhibernate]二级缓存(二)

目录 写在前面 文档与系列文章 更新数据 二级缓存管理 总结 写在前面 本篇文章也算nhibernate入门系列的结尾了,在总结nhibernate系列的过程中,遇到了很多问题,学习的过程也是解决bug的过程,在学习nhibernate的过程中还学习了单元测试的使用,这个是附属产品,我也没有想到,算是意外收获吧。这个系列学完了,正好公司有个项目,马上就要立项,正好能将学到的东西运用到...

weixin_34038293的博客 222

NHibernate 3.2 CodeFirst Many to Many

一直没有在项目里用过NHibernate3.2的CodeFirst 这次因为项目需要用到Oracle数据库而我对EF对Oracle支持心里犯嘀咕所以为保险起见我用NHibernate,以前都是写就映射文件的,现在3.2里已经集成了Maping Bycode工具可以说是NHibernate对CodeFirst支持得很不错了!我也不想采用Xml文件了(至于原因大家都懂得的!) 明白了大多数...

a766799的博客 155

我的NHibernate

废话不多说,直接上图:   这是整个项目的目录结构。 其中:User.cs代码如下: using System; using System.Collections; namespace Modelse { #region User /// &lt;summary&gt; /// User object for NHibernate mapped table...

weixin_34365417的博客 80

加快NHibernate的启动速度的小技巧

今天在《NHibernate 3.0 Cookbook》中学习到一个稍微加快NHibernate速度的小技巧,特地与园友们分享。 废话不多说直接上代码。请看: public class ConfigurationBuilder { private const string SERIALIZED_CFG = "configuration.bin"; ...

weixin_30466953的博客 195
上一篇: 2014暑假学习总结
下一篇: 提高用户体验--子非鱼,须知鱼之乐
chenjinge7
博客等级 码龄15年 64粉丝 67原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值