天天看點

[NHibernate]視圖處理

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t1" target="_blank">寫在前面</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t2" target="_blank">文檔與系列文章</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t3" target="_blank">視圖</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t4" target="_blank">一個例子</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t5" target="_blank">總結</a>

前面的文章主要講了對實體資料表的操作,當然了nhibernate同樣可以操作視圖,本文将講nhibernate對視圖操作的種種。

<a href="http://www.cnblogs.com/wolf-sun/p/3694592.html">[nhibernate]體系結構</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3694901.html">[nhibernate]isessionfactory配置</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3704012.html">[nhibernate]持久化類(persistent classes)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3705229.html">[nhibernate]o/r mapping基礎</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3720259.html">[nhibernate]關聯映射</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3721528.html">[nhibernate]parent/child</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3724052.html">[nhibernate]緩存(nhibernate.caches)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734249.html">[nhibernate]nhibernate.tool.hbm2net</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734313.html">[nhibernate]nullables</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3956802.html">[nhibernate]nhibernate如何映射sqlserver中image字段</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html">[nhibernate]條件查詢criteria query</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html">[nhibernate]增删改操作</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4049716.html">[nhibernate]事務</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4050714.html">[nhibernate]并發控制</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4067026.html">[nhibernate]元件之依賴對象</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4068749.html">[nhibernate]一對多關系(級聯删除,級聯添加)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4070935.html">[nhibernate]一對多關系(關聯查詢)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4074654.html">[nhibernate]多對多關系(關聯查詢)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4077226.html">[nhibernate]延遲加載</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082432.html">[nhibernate]立即加載</a>

首先建立一個vw_customerorder(采用同資料表相同的命名規則,如資料表tb_customer)的視圖,選中customerid,customername,customeraddress,orderid,orderdate字段

[NHibernate]視圖處理
[NHibernate]視圖處理

添加視圖的持久化類

[NHibernate]視圖處理
[NHibernate]視圖處理

注意:對視圖最常用的是查詢操作,視圖是一張虛表,也就是隻讀的(資料的來源是來自實體表的)。是以這裡将持久化類的屬性設定為隻讀的(private set)就可以了,如果真想修改資料了,就通過修改實體表的資料。

編寫映射檔案customerorderview.hbm.xml

[NHibernate]視圖處理
[NHibernate]視圖處理
注意:1,在nhibernate中使用視圖的時候,最容易忽略的就是沒有給視圖指定主鍵,這種情況下很容易出錯。          2,注意映射檔案中class節點指定mutable="false"屬性(對對象的修改不能持久化到資料庫中)。          3,記得添加過映射檔案,修改hbm.xml屬性為嵌入資源

測試

 擷取某客戶下面所有的訂單資訊。

[NHibernate]視圖處理
[NHibernate]視圖處理

此時會有一個異常

[NHibernate]視圖處理
[NHibernate]視圖處理

意思已經很明白了,說屬性的set方法,應該是public或者protect virtual的。解決辦法,要麼修改回預設的public,要麼修改映射檔案的預設加載方式将hibernate-mapping的default-lazy屬性設定為false。讓他立即加載。

[NHibernate]視圖處理
[NHibernate]視圖處理

結果

[NHibernate]視圖處理

生成的sql語句

[NHibernate]視圖處理

本文介紹了在nhibernate中使用視圖的内容,遇到一個bug,将解決bug的過程分享了一下,遇到bug不要慌,解決了一個bug,你就會對它印象深刻,至少下次再遇到了,你知道如何去解決了,也是一種進步,不要怕犯錯。

部落格位址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

部落格版權:

本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。

如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!

再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/4082899.html