日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NHibernate之旅(14):探索NHibernate中使用视图

發(fā)布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NHibernate之旅(14):探索NHibernate中使用视图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本節(jié)內容

  • 引入
  • 1.持久化類
  • 2.映射文件
  • 3.測試
  • 結語

引入

在數(shù)據(jù)庫操作中,我們除了對表操作,還有視圖、存儲過程等操作,這一篇和下篇來學習這些內容。這篇我們來學習怎樣在NHibernate中使用視圖。首先,我們在數(shù)據(jù)庫中建立一個名為viewCustomer視圖。選中CustomerId、Firstname、Lastname、OrderId、OrderDate項。

以下我們依次為這個視圖編寫持久化類和映射吧。

1.持久化類

同持久化數(shù)據(jù)庫中的表類似,我們須要對視圖持久化,定義視圖中的每一個屬性,由于視圖是僅僅讀的,所以在這里我們僅僅要把屬性的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文件。與映射數(shù)據(jù)庫表類似。編寫代碼例如以下:

<?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.測試

在數(shù)據(jù)訪問層(DAL)中編寫一個方法獲取訂單時間在orderDate之后的顧客列表,方法例如以下:

public IList<CustomerView> GetCustomerView(DateTime orderDate) {return _session.CreateCriteria(typeof(CustomerView)).Add(Restrictions.Gt("OrderDate", orderDate)).List<CustomerView>(); }

在數(shù)據(jù)訪問測試層(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中怎樣使用視圖,是不是非常easy啊。

結語

通過這篇文章的展示,我們學習了在NHibernate中怎樣使用視圖,同表類似,僅僅是屬性訪問權限不同罷了,假設你原來不知道怎樣使用視圖,網(wǎng)上到如今也沒有相關資料認為無從下手,通過這篇文章的高速閱讀,是不是使用視圖非常easy,豁然開朗的樣子(視圖原來這樣啊,沒有什么神奇之處~~)。

下篇我們來看看NHibernate中使用儲存過程,用過存儲過程的朋友都知道。真是煩人,這個存儲過程我真是弄了非常長時間。在實際運用中錯誤不斷,我把它一一化解,請征集意見,大家說下篇是寫一一化解的整個具體過程(涉及錯誤信息。怎樣改動,2篇樣子)還是直接講正確方案(1篇搞定)。由你做主!

轉載于:https://www.cnblogs.com/brucemengbm/p/6914178.html

總結

以上是生活随笔為你收集整理的NHibernate之旅(14):探索NHibernate中使用视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。