NHibernate使用--進階篇(多表查詢)


在開發的過程中我們總是會碰到多表操作的需求,今天我分享一個關於查詢的方法,

前言:在使用NHibernate中,需要將用戶表(Users)、部門表(Departments),鏈表查詢,在網上找了很多資料,可以在配置文件中配置相應的屬性達到關聯的效果,一對多、多對一、多對多的方式,但是使用后發現有些不便,尤其時剛開始接觸NHibernate,有點兒難理解,現在我使用一種新的方法,使用我們最熟悉的SQL來完成相關功能

 

1.0 首先我們需要把環境配置好,請參考我前面的隨筆,

2.0 我們在NHibernateSample中定義一個方法

/// <summary>
        /// 查詢所有數據
        /// </summary>
        /// <returns></returns>
        public IList<Object> GetCustomers()
        {
            return Session.CreateSQLQuery("select  A.*,B.* from Users A ,Departments B WHERE A.Dept_id = B.dept_id")
                .AddEntity(typeof(Users)).AddEntity(typeof(Departments)).List<Object>();
              
            //return Session.QueryOver<MyDepartments>().List();
        }
查詢方法

  

  正如上圖所屬我們使用了連表查詢, 這個時候查詢出來的結果是兩張表的公共交集 包含所有的字段,隨后我們在后面使用.AddEntity(typeof(Users))NHibernateSample會在編譯的時候獲取我們傳入的類型,隨即找到相應的配置文件,根據配置文件相應的配置,就可以將我們的類中的字段和數據庫查詢結果的字段一一對應 ,然后生成相應的結果集,最后我們輸出.List<Object>(); 這樣就得到了連表查詢的結果,那么我們該怎么樣使用它呢?返回出來的結果集又是什么樣子的呢?

 

 

返回出來的結果集的樣子:NHibernateSample將數據庫中的一行數據對應到我們給定的實體類對象,因此集合中每一個對象又包含兩個對象一個是部門屬性/值的集合,另一個是用戶屬性/值的集合  

 

該怎么樣使用它 :手動的拼裝返回的結果集

//創建一個操作類對象  這里還記得嘛?我們在NHibernateSample操作類的構造函數中聲明了一個ISession的參數 這里我們調用幫助類的GetSession()方法返回一個ISession
            NHibernateSample _sample = new NHibernateSample(new NHibernateHelper().GetSession());


            //聲明一個對象的集合  由於是多對一的關系 所以我在用戶類中自定義了一個部門類型的屬性字段
            List<Users> list_u = new List<Users>();

            //存放數據庫返回的查詢結果
            IList<Object> list_o = _sample.GetCustomers();

            //這里因為返回的是Object類型 所以只能用for循環 不能使用foreach
            for (int i = 0; i < list_o.Count; i++)
            {
                //獲取集合中的對象
                Object[] isu_d = (Object[])_sample.GetCustomers()[i];

                //將當前對象中的第一個用戶屬性/值的對象集合插入到U對象中
                Users u = (Users)isu_d[0];

                //將當前對象中的第二個部門屬性/值的對象集合插入到U對象的Departments(相應的部門類型屬性 上面提到過的)中
                u.Departments = (Departments)isu_d[1];
                //添加到集合中
                list_u.Add(u);
            }
            //最后返回的就是 用戶的集合list_u  在用戶中的屬性Departments包含了相對應的部門信息
            list_u.Count();
使用返回的結果集

 

結束了---------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM