在Silverlight 4之前要做到資料存取,必需在後端寫Web Services,讓Silverlight呼叫,Select、Update、Delete、Insert可能要寫4個Method,10個Table要存取最少就要寫40個Method,雖然Ajax也是這樣寫,不過還有一個jQuery可以用,但Silverlight卻沒有(雜七雜八的第三方有啦),寫起來有種被折磨的感覺。
Silverlight 4比較好就是新增Domain Service技術,可以自動產生WCF的Web Services存取用Linq或Entity Framework工具拉出來的Table或Entity,在Silverlight專案中也有自動產生Proxy,而且還是不用去管理的Proxy,不用像之前Web Services更新了,還要手動更新Web參考,省了不少功夫。
開發工具
Silverlight 4微軟沒有為Visual Studio 2008開發Silverlight的工具,只能用Visual Studio 2010與Blend 4開發,但VS2010上市(4月中)的時候,Silverlight 4 Tools還在Beta(6月初才發佈正試版),所以Silverlight 4沒有內建在VS2010中,必需安裝
Microsoft Silverlight 4 Tools for Visual Studio 2010
Silverlight 4 Tools中只有Entity Framework To Domain Service的工具,要Linq To Domain Service必需安裝
新增Silverlight專案
新增Silverlight Application時會跳出New Silverlight Applicaion視窗,Enable WCF RIA Services必需勾選,才會自動產生WCF的Proxy。
如果忘了勾,事後也可以在Silverlight專案的內容,選擇Web Application專案(只能選Web Application專案,因為需要Web Services)。
新增Linq To Sql Classes
隨便連一個資料庫,沒資料庫沒資料的,可以下載使用Microsoft SQL Server Community Projects & Samples中的AdventureWorks2008R2作為測試資料庫,隨便拉幾個Table。
很重要一定要Build,不然Domain Service的精靈一定找不到資料。
剛開始我不知道,是找了一二小時才發現這問題的,嘔死了。
新增Domain Service
Domain Service分類在Web下。
有一些設定如可否編輯,而MetaData是關係資料驗證與資料顯示如:DataGrid自己中文標題或驗證錯誤訊息等中繼資料,會額外在產生一個檔案以partial class方式增加。
事實上Domain Service Class只是精靈產生存取Linq的Code,如果事後Model有修改怎麼辦,目前只有砍檔案重新產生Domain Service Class,不過有看過一些文章說為用partial class方式分隔二個檔分別是自動產生與自己增加的,刪除時不會刪到人工增加的Code。
Silverlight存取Domain Service
這時Silverlight的專案可以看到自動產生的Code。
Code寫起來跟一般Linq的寫法很像,只是是非同步最後必需要用Load是取得資料。
比傳統WCF好的地方是,是送Query去取資料,彈性比較大。
Domain Service實作方式
它是WCF也是Web Service,只是自動產生的。
在Web.Config增加一個httpModules,當網址為Domain Service Class + .svc時處理。
如SilverlightRIA.Web.DomainService1會把 . 換成 - 加上.svc,如SilverlightRIA-Web-DomainService1.svc
而Silverlight專案會自動產生關連與Code。