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
    来源:慕课网
    本文首次发布于慕课网 ,转载请注明出处,谢谢合作

  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/Jeely/p/11357721.html
Copyright © 2011-2022 走看看