首先介绍一下框架结构(这个有个概念就可以);

然后我们会介绍一个很重要的概念(一定要好看)!!

这节对 NHibernate 架构做一个介绍,首先要了解一下该框架在应用程序中的位置:

先来一个简单的图:

正如你看见的一样,NHibernate 处于应用程序和数据库中间,作用呢?举个例子:

NHibernate 就好比图书馆的管理员,无论你借书还是还书,只需要告诉管理员,管理员把剩下的事都替你解决了。

再来一张详细点的图:

这个图简单的说,能看出来,NHibernate中有两个“组件”,Session和SessionFactory,以后我们会详细介绍,这里简单介绍一下:每个Session对应一次对数据库的操作,也就是说,当你需要操作数据库的时候,就需要获取一个Session对象,Session封装了操作数据库的上下文,而且Session不是线程安全的;SessionFactory是生成Session的工厂,每一个SessionFactory对应一个数据库,所以并不建议你实例化对个SessionFactory对象,这个是线程安全的(我们建议针对每一个数据库,采用单例方式实现 -- 像我们的Demo)。

最后来一个复杂的图:

还记得Demo中定义的hibernate.hbm.xml吗?

通过配置该配置文件, 可以操作不同类型的数据库。

接下来我们介绍一个重要的概念!!!!!

一个对象在NHibernate框架中有三种状态:transient、persistent和detached,分别介绍:

--- Transient:瞬时状态,就是短暂的临时的

[官方解释]

The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value).

[个人理解]

new 一个类,这个类从来没有被持久化过,即创建一个类后,尚未与NHibernate关联的对象,简单理解,就是你 new 了一个新类。当然你可以通过ISession 把这个类变成持久类。

--- Persistent:持久的状态,就是永久的

[官方解释]

The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, NHibernate guarantees that persistent identity is equivalent to CLR identity (in-memory location of the object).

[个人理解]

如果你理解了Transient状态,那就简单多了,持久类就是该类在数据库中有对应的记录,也许是刚通过Session保存到数据库中或者刚刚被读取出来,总之就是还没有关系该ISession对象,如果你此时修改该对象,那么会直接反应到数据库中,和Silverlight中的双向操作类似。

--- Detached:分离的状态,断开的分开的

[官方解释] The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. Fordetached instances, NHibernate makes no guarantees about the relationship between persistent identity and CLR identity.

[个人理解]

当持久类关联的ISession关闭后,该对象即从持久状态变成了分离状态,其实挺好理解的吧。

这三个状态其实挺重要的,只有你理解了这三个状态,在之后的学习中才会觉得很轻松。

3. NHibernate基础知识 - 你必须知道的一些事情的更多相关文章

  1. C# 基础知识系列- 16 开发工具篇

    0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...

  2. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  3. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  4. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  5. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  6. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  7. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  8. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  9. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. how to uninstall devkit

    http://www.uninstallapp.com/article/How-to-uninstall-Perl-Dev-Kit-PDK-8.0.1.289861.html PerfectUnins ...

  2. hadoop2.2编程:序列化

    测试序列化后的长度 提示:需要用到的类,以及继承关系如下: 1.java.lang.Object |__ java.io.OutputStream |__ java.io.ByteArrayOutpu ...

  3. C# winform 导出导入Excel/Doc 完整实例教程[网上看到的]

    还真没做过winform的导出导入,今天上网百度了一下.结果--- 所以还是我自己写个吧.之前做过web的,半搬半做就OK. 1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上 ...

  4. Android 网络通信框架Volley简介(Google IO 2013)

    1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...

  5. DevExpress右键菜单使用 zt

    添加BarManager和popupMenu组建: 设置popupMenu组件的Manager属性: 右键点击popupMenu主键,点击Customize选项添加菜单:   然后便可添加到鼠标事件中 ...

  6. 哈希(2) hash索引

    首先复习:       索引:快速查找的数据结构 1.可以读以下mysql中索引的使用方法,图文并茂.很好理解. http://www.it165.net/database/html/201310/4 ...

  7. 神经网络中误差反向传播(back propagation)算法的工作原理

    注意:版权所有,转载需注明出处. 神经网络,从大学时候就知道,后面上课的时候老师也讲过,但是感觉从来没有真正掌握,总是似是而非,比较模糊,好像懂,其实并不懂. 在开始推导之前,需要先做一些准备工作,推 ...

  8. HDU 2102 A计划(三维BFS)

    这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...

  9. Morris Traversal 二叉树遍历。

    那天做了个SWAP NODE的题,要求constant space,不得不Morris Traversal. 稍微研究了一下,真正意义上的O(1)space对二叉树进行遍历.好像是1979年的算法. ...

  10. asp.net mvc 提交model 接收不了

    [HttpPost]        //[ValidateInput(false)]        public ActionResult AddNews1(_54Young_News_Model.m ...