天天看點

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

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

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

<a href="http://www.cnblogs.com/wolf-sun/p/4114870.html#t3" target="_blank">表及其限制</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4114870.html#t4" target="_blank">存儲過程</a>

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

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

由于一直在山西出差,有幾天沒更新部落格了。昨晚回到家,将部落格園最近三天更新的文章搜集了一下,花費了半天的時間,看了看,有些文章也隻能先躺在收藏夾裡,慢慢去消化了。廢話不多說了,進入正題,那麼這篇文章就讓我們接着學習schemaexport工具的使用吧,如何使用schemaexport為表添加限制,生成存儲過程,生成視圖?

<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>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html">[nhibernate]視圖處理</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4083402.html">[nhibernate]n+1 select查詢問題分析</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4085314.html">[nhibernate]存儲過程的使用(一)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html">[nhibernate]存儲過程的使用(二)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4093539.html">[nhibernate]存儲過程的使用(三)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4101214.html">[nhibernate]schemaexport工具的使用(一)——通過映射檔案修改資料表</a>

通過上篇文章我們已經知道schemaeport工具是根據映射檔案來生成資料庫的,在映射檔案中通過class映射可以很友善的生成資料庫表。為了更清楚的說明,這篇文章我們建立兩個實體類categoryschema和productschema,他們是一對多的關系。

實體類代碼

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

編寫映射檔案

productschema.hbm.xml

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

categoryschema.hbm.xml

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

在schemaexportfixture類中添加測試代碼

生成的sql語句

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

通過檢視生成的語句,你會發現都按預設的值生成了表,name列字元串類型nvarchar(255),預設為null;外鍵預設一數字字元串等。

設定非空類型和長度

在映射檔案中為productschema實體的name屬性添加:not-null="true"表示非空類型,length="50":列長度設定為50,代碼片段如下:

測試,生成的sql語句如下

設定外鍵限制

在映射檔案設定外鍵名稱,注意有的需要兩邊都要設定才生效,代碼片段如下:

通過sql語句也看到生成的外鍵名稱為映射檔案中設定的名稱,如果在映射檔案中不設定,則生成的外鍵名稱為fk+随機的數字和字母字元串。

設定unique限制

我們要求name字段唯一,添加unique限制,代碼片段如下:

生成的sql為

還有一種unique-key限制,同時為兩個屬性設定unique-key限制。設定跟unique限制類似,不再舉例了。

設定索引index

設定check限制

我們為unitsonstock值設定大于等于0

生成的sql

 在映射檔案中提供了database-object元素用來建立和删除資料庫對象。

文法格式

那麼現在我們建立一個查詢productschema表的存儲過程

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

&lt;databse-object&gt;節點與class節點同一級别。

生成的存儲過程如下圖

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

在之前的篇章中,我們建立了vw_cusomterorder這樣的視圖。那我們現在通過映射檔案建立視圖,修改customerorderview.hbm.xml映射檔案。

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

測試,會有如下異常

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

 生成的sql

[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖
[Nhibernate]SchemaExport工具的使用(二)——建立表及其限制、存儲過程、視圖

觀察nhibernate生成sql語句發現nhibernate利用class映射自動生成了vw_cusomterorder表,因為nhibernate見到class映射就認為是表,它不知道這裡映射的是視圖,視圖和表在映射檔案中沒有什麼差別。我們修改一下這個映射檔案,在database-object元素上面再添加一個database-object用于删除nhibernate生成的表。

這個database-object的意思就是在建立資料庫架構時删除nhibernate自動生成的表vw_cusomterorder,在删除資料庫架構時删除表vw_cusomterorder。

這篇文章主要介紹了使用schemaexport工具使用映射檔案生成資料表限制,存儲過程,視圖等操作。關于schemaexport工具的使用也算完成了。

部落格位址:

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

部落格版權:

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

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

再次感謝您耐心的讀完本篇文章。http://www.cnblogs.com/wolf-sun/p/4114870.html