无废话入门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!



深入剖析一个卷积块(ConvBlock) 阅读详情

相关推荐

《科研伦理与学术规范》 全部 习题_答案 2020年秋

科研伦理与学术规范 答案 文章目录科研伦理与学术规范 答案1. 第一章课后习题(必做) 答案1.1 第一章Demo2. 第二章课后习题(必做) 答案3. 第三章课后习题(必做) 答案4. 第四章课后习题(必做) 答案5. 第五章课后习题(必做) 答案6. 第六章课后习题(必做) 答案 # 每行5题 #写于2020.11.17 侵删 1. 第一章课后习题(必做) 答案 ABC, A, B ,D ,ABCD ABC, D, A, BCD, C D, D, 1.1 第一章Demo

羊老羊 25万+

ORM框架之NHibernate

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

Documentlv的博客 1430

ubuntu20.04安装UE4+Airsim环境

版本UE4.27+Airsim1.81

玖茸的博客 3380

Nhibernate介绍与使用

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

cchoop的博客 1万+

DS250DF410寄存器配置实战:从原理到调试的高速SerDes信号优化指南

在高速串行通信领域,SerDes(串行器/解串器)技术是实现芯片间高速数据传输的核心。其工作原理是通过时钟数据恢复(CDR)从串行数据流中提取时钟,并利用均衡技术补偿信道损耗。这项技术的核心价值在于突破PCB走线或电缆的带宽限制,确保在25Gbps及以上速率下数据的可靠传输。其应用场景广泛覆盖数据中心、高性能计算和通信设备中的高速背板、光模块及芯片互连。本文以TI的DS250DF410多通道重定时器为例,深入剖析其寄存器配置,特别是如何通过精细调控其自适应均衡器和眼图监测模块,实现对高速链路的信号整形与质量

aodiyi6351的博客 386

提高机器学习模型准确率的八大方法

原文连接:http://www.techweb.com.cn/network/system/2016-01-27/2269274.shtml 此文仅是一个小品文,详细理论请读论文,参考书籍。 前言:我的概述 机器学习面对的是一个受限有穷空间 到 一个扩大的有穷空间 的泛化问题。若假设空间足以覆盖真实的数据空间,机器学习方法可以弃之不...

alppkk4545的博客 1301

NHibernate重要概念的解释和说明

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

bcbobo21cn的专栏 1282

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 372

NHibernate简介

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

lee576的专栏 1524

【基础-多选】HarmonyOS鸿蒙应用开发

1、HarmonyOS提供了基础的应用加固安全能力,包括混淆、加密和代码签名能力。正确2、可以通过ohpm uninstall 指令下载指定的三方库。错误3、支持模块化开发是指一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发,Module中可以包含源代码、资源文件、第三方库、配置文件等,每一个Module可以独立编译,实现特定的功能。这种模块化、松耦合的应用管理方式有助于应用的开发、维护与扩展。正确。

江拥羡橙的博客 1万+

Agentic AI应用架构师如何提升AI应用的灵活性

可扩展性(Scalability):快速添加新功能或扩展任务范围(如Agent从“客服”扩展到“供应链管理”);可修改性(Modifiability):调整Agent的决策逻辑或动作策略,无需重构整个系统;鲁棒性(Robustness):在环境异常或数据噪声下保持性能稳定;自适应(Self-Adaptation):自主学习新场景,无需人工干预。状态空间(S):Agent能感知的所有内部/外部状态(如用户需求、环境数据);动作空间(A):Agent能执行的所有动作(如调用工具、发送消息);

项目管理的博客 582

八、NHibernate关系之——多对多

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

soldierluo的专栏 1万+

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 601

Nhibernate+SQLite 入门实例指南一

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

weixin_34248258的博客 224

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NHibernate中使用NLog

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

从心所欲,不逾矩 197

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NHibernate入门初学者-先睹为快

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

金培龙(Long_carol)的专栏 1110

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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、付费专栏及课程。

余额充值