• 一步步学习NHibernate(2)——配置NHibernate的环境


    请注明转载地址:http://www.cnblogs.com/arhat

    第二章 环境搭建

    在上一章中,我们知道了NHibernate是用来干什么的了,那么今天在本章中,我们开始搭建NHibernate的运行环境,在讲述NHibernate的时候,我们采用C#控制台应用程序来讲解,等到后面的时候,我们使用ASP.NET MVC和NHibernate的结合来开发项目。在以前,老魏写过一个《ASP.NET MVC NHibernate 整合》,这篇文章老魏写的有问题,有其事Nhibernate的GetCurrentSession的问题,那么老魏在讲解NHibernate的时候会专门来讲解这个只是,同时更改一下《ASP.NET MVC NHibernate 整合》的内容。

    首先我们得进入到NHibernate的官方网站下载NHibernate的必要文件,地址:http://nhforge.org/大家可以自行下载。这里呢,老魏使用的是NHibernate-3.2.0,数据库使用的是MySQL。

    首先我们建立一个空的解决方案“NHibernateStudy”,在解决方案中我们创建两个项目,一个是c#控制台应用程序NHibernateTest,另外一个是C#类库DAL。

    wps_clip_image-20240

    在NHibernateTest中,我们添加一个应用程序配置文件App.config。顺便添加NHibernateTest对DAL的应用。我们在DAL中添加NHibernate的两个必要dll文件“Iesi.Collections.dll”,“NHibernate.dll”文件,并生成以下解决方案。

    更改App.config文件,内容如下:

    <configSections>
    
    <!--声明NHibernate的配置节点-->
    
            <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
    
        </configSections>
    
        <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    
    <!--SessionFactory的配置-->
    
            <session-factory>
    
    <!--方言用的是Mysql-->
    
                <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    
    <!--是否显示sql语句-->
    
                <property name="show_sql">true</property>
    <!--使用NHibernate提供的MySql驱动-->
    
                <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    
    <!--链接字符串-->
    
                <property name="connection.connection_string">persistsecurityinfo=True;server=127.0.0.1;user id=root;password=symjie;database=school</property>
    
              </session-factory>
    
        </hibernate-configuration>

    其中在这个配置文件中出现了一个非常重要的SessionFactory的配置,这个配置对应着一个对象”SessionFactory”,这个对象是会话工厂,提供一个有效的会话链接。这一点在后面的代码中,老魏讲详细的说明。

    然后我们在DAL项目中,创建一个NHibernateHelper.cs文件,内容如下:

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using NHibernate.Cfg;
    
    using NHibernate;
    
    namespace DAL
    
    {
    
    public class NHibernateHelper
    
        {
    
    //会话工厂
    
    public static ISessionFactory factory = null;
    
    static NHibernateHelper() 
    
            {
    
    //读取配置文件,根据配置文件创建一个会话工厂,而这个就是从<session-factory>节点中读取的信息
    
                factory = new Configuration().Configure().BuildSessionFactory();
    
            }
    
    //定义一个打开数据库链接的方法
    
    public static ISession OpenSession()
    
            {
    
    //通过工厂打开一个Session(会话)
    
    return factory.OpenSession();
    
            }
    
        }
    
    }

    在这个类中,我们出现了两个接口,ISessionFactory和ISession,其中ISessionFactory是一个会话工厂,用于提供数据库链接会话的创建。ISession是表示一个数据库链接的会话,这里我们可以认为是一个数据库链接相当于ADO.NET 中的Connection,但是实际上ISession的功能比Connection要强大的多。

    我们在DAL中,创建一个测试文件“Test.cs”内容如下:

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using NHibernate;
    
    namespace DAL
    
    {
    
    public class Test
    
        {
    
    public void TestConnection() 
    
            {
    
    ISession session = NHibernateHelper.OpenSession();
    
    using (session)
    
                {
    
    Console.WriteLine("是否已经打开数据库链接?" + session.IsOpen);
    
                }
    
    Console.WriteLine("数据库是否已经关闭链接?" + session.IsOpen);
    
            }
    
        }
    
    }

    然后更改一下NHibernateTest项目中的Program.cs文件,在主函数中创建Test类,并调用Test类的TestConnection方法来测试一下数据库是否打开。

    static void Main(string[] args)
    
            {
    
                DAL.Test test = new DAL.Test();
    
                test.TestConnection();
    
            }

    运行一下程序,看看结果。

    wps_clip_image-9060

    看来,我们已经成功的配置了NHibernate的测试项目,并成功的打开数据库和关闭数据库了。

  • 相关阅读:
    tp3中子查询 逻辑条件是or
    数据量大的情况用布隆过滤器判断是否已存在
    pip 通过pqi切换源到国内镜像
    php先响应后处理
    selenium登录网银,密码控件输入
    mysql 查询a表在b表中不存在的记录
    下列java代码中的变量a、b、c分别在内存的______存储区存放。
    关于选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。问题解决
    VBOX不能为虚拟电脑打开一个新任务解决方法
    解决虚拟机似乎正在使用的问题
  • 原文地址:https://www.cnblogs.com/arhat/p/3565392.html
Copyright © 2020-2023  润新知