1. 程式人生 > 實用技巧 >NHibernate之(14):探索NHibernate中使用檢視

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 Q&A

下次繼續分享NHibernate!