程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> NHibernate之旅(14):探索NHibernate中使用視圖

NHibernate之旅(14):探索NHibernate中使用視圖

編輯:關於.NET

本節內容

引入

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篇搞定)。由你做主!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved