前言:

谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常轻量级的对象封装。NHibernate 是一个基于.Net 的针对关系型数据库对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具(ORM)。

 体系结构

SessionFactory(NHibernate.IsessionFactory):它是Session的工厂,是ConnectionProvider的客户。可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存的可以在事物中重用的数据。

会话(NHibernate.ISession):单线程,生命期较短的对象,代表应用程序和持久化层之间的一次对话。封装了一个ADO.NET连接,也是Transaction的工厂。保存有必需的(第一级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。

持久化对象(Persistent)其集合(Collections):生命期较短的单线程的对象,包含了持久化状态和商业功能。这些可能是普通的对象,唯一特别的是现在从属于且仅从属于一个Session。一旦Session被关闭,它们都将从Session中取消联系,可以在任何程序层自由使用(比如,直接作为传送到表现层的DTO,数据传输对象)。

事务Transaction (NHibernate.ITransaction):(可选)单线程,生命期较短的对象,应用程序用其来表示一批工作的原子操作,它是底层的ADO.NET事务的抽象。一个Session在某些情况下可能跨越多个Transaction事务。

 持久化类

持久化类是暂时存在的,实例会被持久性保存于数据库中.如:virtual public string Name { get; set; }

NHibernate默认使用代理功能,要求持久化类不是sealed的,而且其公共方法、属性和事件声明为virtual。

属性不一定需要声明为public的。NHibernate可以对default、protected、internal或private的属性执行持久化.

映射(Mapping)

对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。

 使用方法(结合MVC3开发)

  1. 添加Nugget包:如下图:

                     一个使用MVC3+NHibernate “增删改查” 的项目(修正版)    

            一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

                                                一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

 

      2、在项目中配置NHibernate:

             (1)、打开本项目文件夹下有个"packages"文件夹-->NHibernate.3.3.3.4000-->ConfigurationTemplates-->MSSQL.cfg.xml。

             (2)、复制MSSQL.cfg.xml到项目根目录下,改名为”hibernate.cfg.xml“,紧接着 右键属性:无,如果较新则复制。否则出现“failed: NHibernate.Cfg.HibernateConfigException : An exception occurred during configuration of persistence layer. ----> System.IO.FileNotFoundException : 未能找到文件“NHibernateSample\NHibernateSample.Data.Test\bin\Debug\hibernate.cfg.xml””异常。

             如下图:

                                        一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

                                                                              一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

     3、数据库中添加表:Users。

    4、在项目中建立”Entities“文件夹,添加Users类。

                
  public class Users
    {
        virtual public int ID { get; set; }
        [DisplayName("姓名")]
        virtual public string Name { get; set; }
         [DisplayName("密码")]
        virtual public string PassWord { get; set; }
         [DisplayName("身高")]
        virtual public string Height { get; set; }
         [DisplayName("工作")]
        virtual public string Descript { get; set;
         [DisplayName("创建时间")]
        virtual public DateTime CreateTime { get; set; }
    }
Users类

相关文章: