码迷,mamicode.com
首页 > Windows程序 > 详细

C#—Nhibernate探索教程

时间:2018-07-14 20:00:02      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:odi   测试的   ping   sof   bsp   文件的   mssql   init   pre   

 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.0\Xml\Schemas

因为是我用的是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 void CreateCustomer(Test test)

        {

            Session.Save(test);

            Session.Flush();

        }

        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-20160718RXO\SA;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探索之旅,结果是非常顺利的配置成功了。

C#—Nhibernate探索教程

标签:odi   测试的   ping   sof   bsp   文件的   mssql   init   pre   

原文地址:https://www.cnblogs.com/kiba/p/9306668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!