NHibernate之(14):探索NHibernate中使用檢視
本節內容
- 引入
- 1.持久化類
- 2.對映檔案
- 3.測試
- 結語
引入
在資料庫操作中,我們除了對錶操作,還有檢視、儲存過程等操作,這一篇和下篇來學習這些內容。這篇我們來學習如何在NHibernate中使用檢視。首先,我們在資料庫中建立一個名為viewCustomer檢視,選中CustomerId、Firstname、Lastname、OrderId、OrderDate項。
下面我們依次為這個檢視編寫持久化類和對映吧。
1.持久化類
同持久化資料庫中的表類似,我們需要對檢視持久化,定義檢視中的每個屬性,因為檢視是隻讀的,所以在這裡我們只要把屬性的Setter設定為private訪問許可權。具體做法如下:
在專案DomainModel層的Entities資料夾中新建CustomerView.cs類,編寫程式碼如下:
namespace DomainModel.Entities { public class CustomerView { public virtual int CustomerId { get; private set; } public virtual string Firstname { get; private set; } public virtual string Lastname { get; private set; } public virtual int OrderId { get; private set; } public virtual DateTime OrderDate { get; private set; } } }
2.對映檔案
在專案DomainModel層的Mappings資料夾中新建CustomerView.hbm.xml檔案,與對映資料庫表類似,編寫程式碼如下:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel"> <class name="DomainModel.Entities.CustomerView,DomainModel" table="viewCustomer" mutable="false" > <id name="CustomerId" column="CustomerId" type="Int32"> <generator class="native" /> </id> <property name="Firstname" column="Firstname" type="string" /> <property name="Lastname" column="Lastname" type="string" /> <property name="OrderId" column="OrderId" type="Int32" /> <property name="OrderDate" column="OrderDate" type="DateTime" /> </class> </hibernate-mapping>
好了,到這裡我們準備工作就做完了,即完成了持久化和對映。下面我們可以使用檢視了。
3.測試
在資料訪問層(DAL)中編寫一個方法獲取訂單時間在orderDate之後的顧客列表,方法如下:
public IList<CustomerView> GetCustomerView(DateTime orderDate) { return _session.CreateCriteria(typeof(CustomerView)) .Add(Restrictions.Gt("OrderDate", orderDate)) .List<CustomerView>(); }
在資料訪問測試層(DAL.Test)中編寫一個方法由於測試上面的方法。首先呼叫這個方法查詢出訂單時間在2008年10月1日之後的顧客列表,斷言其訂單時間是否大於2008年10月1日。
[Test] public void GetCustomerViewTest() { DateTime testorderDate = new DateTime(2008, 10, 1); IList<CustomerView> customers = _relation.GetCustomerView(testorderDate); foreach (CustomerView view in customers) { Assert.GreaterOrEqual(view.OrderDate, testorderDate); } }
OK!測試通過,NHibernate生成SQL語句如下:
SELECT this_.CustomerId as CustomerId0_0_, this_.Firstname as Firstname0_0_, this_.Lastname as Lastname0_0_, this_.OrderId as OrderId0_0_, this_.OrderDate as OrderDate0_0_ FROM viewCustomer this_ WHERE this_.OrderDate > @p0; @p0 = '2008/10/1 0:00:00'
好了,到此我們學會了在NHibernate中如何使用檢視,是不是很簡單啊。
結語
通過這篇文章的展示,我們學習了在NHibernate中如何使用檢視,同表類似,只是屬性訪問許可權不同罷了,如果你原來不知道如何使用檢視,網上到現在也沒有相關資料覺得無從下手,通過這篇文章的快速閱讀,是不是使用檢視非常簡單,豁然開朗的樣子(檢視原來這樣啊,沒有什麼神祕之處~~)。下篇我們來看看NHibernate中使用儲存過程,用過儲存過程的朋友都知道,真是煩人,這個儲存過程我真是弄了很長時間,在實際運用中錯誤不斷,我把它一一化解,請徵集意見,大家說下篇是寫一一化解的整個詳細過程(涉及錯誤資訊,如何修改,2篇樣子)還是直接講正確方案(1篇搞定)。由你做主!
本系列連結:NHibernate之旅系列文章導航
下次繼續分享NHibernate!