1. 程式人生 > >C#—Nhibernate探索教程

C#—Nhibernate探索教程

uil set 忘記 ref 驅動 info round rgs 找到

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探索教程