4,ORM組件XCode(與ObjectDataSource共舞) html
XCode爲了能更方便的解決大部分問題,不得不「屈身」於ObjectDataSource。 數據庫
先上一個經典例子(ObjectDataSource+GridView)(ObjectDataSource): 框架
下面用截圖演示整個過程: 測試
拖GridView和ObjectDataSource 網站
選中ObjectDataSource,注意右上角的智能標記 spa
配置數據源 code
這裏只列出數據組件,爲何這裏只有咱們的Area類?爲何?咱們看看實體類 orm
就是DataObject特性起的做用,應該說,全部加了該特性的類,都會被看成數據組件在ObjectDataSource配置裏面出現。固然,不加DataObject特性也是能夠的,可是在ObjectDataSource配置的時候,就不能勾選數據組件了,那樣會列出全部類(是的,全部類)。 server
選擇Area類,繼續 htm
繼續猜想,這裏能列出這些方法,應該也是有特性的,那就是DataObjectMethod特性啦。
第一個參數表明方法類型(查詢、插入、更新、刪除),第二個參數表示是否默認方法,默認方法會在配置ObjectDataSource時被默認選中。
固然啦,另外三個配置頁也是有的(這裏以Update爲例)
最後一步定義參數,在這裏就不定義了
能夠看到,左邊已經列出了前面選擇的Select方法的全部參數。
來看看一個神奇的地方
ObjectDataSource能夠把查詢參數綁定到Cookie、控件、Request.Form、Request.QueryString、Session等。咱們通常綁定到控件,作查詢的時候很是有用。每個查詢項做爲一個參數,而後在這裏綁定到對應的控件;也常常綁定到QueryString,好比表單頁面編輯數據的時候,這裏綁定主鍵,而後就能把相應的對象找出來。
這裏神奇的地方就在於綁定。須要作複雜查詢的時候,能夠在界面上放置查詢控件
而後編寫一個對應的查詢方法,固然要加上DataObjectMethod特性了,而後在ObjectDataSource配置的時候把參數和控件綁定起來
(關於這類高級查詢後面專門介紹,這裏僅僅是爲了說明綁定的神奇)
綁定的神奇就在於,界面控件問數據源控件(如ObjectDataSource)要數據的時候,數據源控件開始着手準備參數,反射讀取綁定控件的值做爲參數,並轉爲相應的類型,而後再反射調用實體類的查詢方法(如Search)。
到這裏,ObjectDataSource的基本配置已經完成,絕大多數ORM框架對ObjectDataSource的支持,也僅僅是到這裏而已。而XCode的模型,是徹底知足ObjectDataSource要求的,下面繼續高級功能
這是ObjectDataSource控件屬性中的分頁類屬性,第一項啓用分頁,第三項指定用於查詢全部記錄數的方法(前面提到過查詢方法是成對出現的,這裏的FindAllByName和FindCountByName就是一對),至於第二項和第四項,是否是很熟悉?
這兩個方法,一個返回實體集合,一個返回總行數,而參數則是一摸同樣。這就是ObjectDataSource對分頁查詢的要求,若是沒有第二個,ObjectDataSource也能提供查詢數據功能,可是就沒辦法分頁了。
回過頭了,仔細看看最後兩個參數的名稱,是否是跟ObjectDataSource屬性中的那兩個一摸同樣?因此,XCode使用這兩個名字做爲參數名,正是這個緣由。若是查詢方法使用的不是這兩個參數,那麼在配置ObjectDataSource的時候本身跟着改就是了。
這兩個參數,第一個是從哪一行開始讀數據,第二個是返回的最大行數,其實就是每頁行數。這種分頁結構,跟別的絕大部分分頁控件什麼的都不相同。因此,並非XCode的分頁另類,而是別的分頁纔是另類,XCode是正統(哈哈)。
除了分頁屬性,再看看一個排序屬性
正是查詢方法的倒數第三個參數。GridView在排序的時候,會給這個參數傳遞ID Asc或Name Desc等。而查詢方法內部,正是根據這個參數,以及兩個分頁參數,拼接SQL語句進行查詢的。
至此,ObjectDataSource配置完成。打開GridView的智能標記,選擇ObjectDataSource控件做爲數據源,GridView便可自動生成列
固然,這個列並非數據庫字段,而是實體類的屬性。
在智能標記面板上能夠看到,啓用分頁和啓用排序能夠勾選了,正是由於剛纔在ObjectDataSource中配置好了。都勾上!
運行,看效果
界面很醜,不過那是美工的事情了。試試分頁(打開OrmDebug開關,查看SQL語句)
執行的SQL:
Select * From (Select row_number() over(Order By ID Desc) as row_number, * From Area) XCode_Temp_b Where row_Number Between 71 And 80
這是XCode生成的分頁語句,由於如今測試環境是SQL2008,隨意生成了row_number的分頁,若是是別的數據庫,就會不一樣了。但那是XCode的事情,開發者不須要關心。
再試試在分頁的基礎上排序(點擊Name):
執行的SQL:
Select * From (Select row_number() over(Order By Name) as row_number, * From Area) XCode_Temp_b Where row_Number Between 81 And 90
排序已經改成Order By Name了,再點一次Name,執行SQL:
Select * From (Select row_number() over(Order By Name DESC) as row_number, * From Area) XCode_Temp_b Where row_Number Between 81 And 90
徹底知足要求!
BTW:GridView那裏,其實還能夠啓用編輯和刪除的,由於配置ObjectDataSource的時候,默認已經配置了編輯和刪除的方法。
最後,目的已經達到,或許你尚未發現,到這裏咱們尚未手工編寫任何代碼呢!
XCode與ObjectDataSource共舞能夠獲得很是美的開發效果,可是,上面的模式,已是三年前的作法了,咱們如今有了更好的工業級的作法——批量生產!
大石頭
新生命開發團隊
2010-08-24 13:25
做者: 大石頭 發表於 2010-09-13 01:39 原文連接
最新新聞:
· 是否該讓開發人員跟客戶直接交流?(2010-12-21 07:53)
· 亞馬遜副總裁跳槽Groupon任CFO(2010-12-21 07:50)
· Gmail語音服務將延長至2011年末(2010-12-21 07:49)
· AOL收購我的檔案網站About.me(2010-12-21 07:48)
· AT&T 19.25億美圓購入高通 700MHz 低頻頻譜(2010-12-21 07:42)
編輯推薦:Mono又更新了