zoukankan      html  css  js  c++  java
  • C#—Nhibernate使用教程

    本篇文章,让我们一起来探索Nhibernate。
    首先我们去搜索Nhibernate下载地址,如下链接所示。
    该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。
    https://sourceforge.net/projects/nhibernate/
    下载完成后,解压缩如图所示。

    图片描述

    其中Required_Bins存储的是类库和其他资源;字面的意思Required,是必须文件。
    打开Required文件夹,里是这样的。
    两个类库;两个类库是要被引用的。
    类库拥有对应的XML,没找到具体使用该XML的方法。所以暂时不去理他。
    NHibernate.pdb应该是没有用的。估计是作者忘记删除了。
    nhibernate-configuration.xsd和nhibernate-mapping.xsd是要放到c盘的,路径如下:
    C:Program Files (x86)Microsoft Visual Studio 11.0XmlSchemas
    因为是我用的是vs2012,所以,我找的路径是Microsoft Visual Studio 11.0。
    我上网上调查了下这两个文件是做什么用的。调查结果是,这俩货是【文件智能提示功能】用的。
    上网调查后,发现Nhibernate有Castle框架、LinFu框架、Spring.Net三种。
    看起来很复杂,不过先不去管那么多,先直接引用类库。
    图片描述
    然后我建立了一个类库程序,引用Iesi.Collections.dll和NHibernate.dll两个DLL。
    接下来,我们开始建立持久化对象。

    public class Test
        {
            public virtual int Id { get; set; }
            public virtual string Name { get; set; }
    }
    

    对象与数据库的映射是保存在XML文件中的,我们配置XML映射文件如下。
    该XML文件的属性,要求设置其生成操作为【嵌入的资源】。
    此外,我怕它丢失,还给他设置了始终复制的属性。

    XML文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
       assembly="NherbinateHelper"
       namespace="NherbinateHelper">
    
      <class name ="Test">
        <id name="Id" column ="Id">
          <generator class ="native"/>
        </id>
        <property name ="Name"/>
    
      </class>
    </hibernate-mapping>
    

    再然后,我们建立数据库连接的类。
    因为我们没有显示设置数据库连接字符串,所以,我猜测这个类,会读配置文件中SQL字符串连接。

     public class NHibernateHelper
        {
            private ISessionFactory _sessionFactory;
            public NHibernateHelper()
            {
                _sessionFactory = GetSessionFactory();
            }
            private ISessionFactory GetSessionFactory()
            {
                return (new Configuration()).Configure().BuildSessionFactory();
            }
            public ISession GetSession()
            {
                return _sessionFactory.OpenSession();
            }
    }
    

    然后,我们建立domain(域),添加增删改查的方法。

    public class NHibernateSample
        {
            protected ISession Session { get; set; }
            public NHibernateSample(ISession session)
            {
                Session = session;
            }
    
          public Test GetCustomerById(int Id) 
            { 
                return Session.Get<Test>(Id); 
            }
      }

    然后,我们新建一个控制台程序,用来调用这个类库测试。

    测试类代码如下。

    public class NHibernateSampleFixture 
        { 
            private NHibernateSample _sample; 
            public NHibernateSampleFixture() 
            { 
                _sample = new NHibernateSample(new  NHibernateHelper().GetSession()); 
            } 
            public void GetCustomerByIdTest() 
            { 
                var tempCutomer = new Test {  Name = "李" }; 
                _sample.CreateCustomer(tempCutomer); 
                Test customer = _sample.GetCustomerById(1); 
                int customerId = customer.Id; 
    
            } 
    }

    调用如下:

    class Program 
        {
    
            static void Main(string[] args) 
            {
    
                NHibernateSampleFixture f = new NHibernateSampleFixture();
    
                f.GetCustomerByIdTest(); 
            } 
    }

    测试结果是失败,因为缺少配置数据库连接的文件。
    现在我们打开文件夹Configuration_Templates,发现Configuration_Templates文件夹下有如下文件。
    图片描述

    我使用的数据库是sqlserver,所以,我复制了mssql.cfg.xml。
    然后将复制的文件,黏贴到测试的控制台程序下,然后改名为《hibernate.cfg.xml》。
    这里测试了下,貌似不改名不好使,配置文件内容如下
    【PS:我始终没搞懂,XML中的CFG代表什么意思。】

    <?xml version="1.0" encoding="utf-8"?>
    
    <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
        <session-factory name="NHibernate.Test">
            <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
            <property name="connection.connection_string">
          Server=SKY-20160718RXOSA;initial catalog=Nherbinate;Integrated Security=SSPI;
        </property>
            <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
        <mapping assembly="NherbinateHelper"/>
      </session-factory>
    </hibernate-configuration>
    

    我连接的是sqlserver2012,所以配置文件里,我有做修改,修改驱动为NHibernate.Dialect.MsSql2012Dialect。原始版是2008。
    其中<mapping assembly="NherbinateHelper"/>是后加的,原文件里没有。
    这句话的意思是,映射我创建的那个类库。
    我推断,Nherbinate是读这个配置文件,然后到这个程序集里,反射查询那些poco对象。
    最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。
    结果是我没改,测试一切正常。可以顺利使用。
    结语
    这是一场Nhibernate探索之旅,结果是非常顺利的配置成功了。


    作者:Kiba518
    链接:https://www.imooc.com/article/43748
    来源:慕课网
    本文首次发布于慕课网 ,转载请注明出处,谢谢合作

  • 相关阅读:
    三目运算符和逗号表达式
    ++与--操作符
    位运算符
    逻辑运算符
    接续符
    单引号和双引号
    注释分析
    enum,sizeof,typedef
    TERADATA数据库操作
    利用Spring的AbstractRoutingDataSource解决多数据源的问题
  • 原文地址:https://www.cnblogs.com/Jeely/p/11357721.html
Copyright © 2011-2022 走看看