Silverlight 4使用Domain Service做資料快速存取

在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之前要做到資料存取,必需在後端寫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必需安裝

WCF RIA Services Toolkit

 

新增Silverlight專案

新增Silverlight Application時會跳出New Silverlight Applicaion視窗,Enable WCF RIA Services必需勾選,才會自動產生WCF的Proxy。

image

如果忘了勾,事後也可以在Silverlight專案的內容,選擇Web Application專案(只能選Web Application專案,因為需要Web Services)。

image

 

新增Linq To Sql Classes

隨便連一個資料庫,沒資料庫沒資料的,可以下載使用Microsoft SQL Server Community Projects & Samples中的AdventureWorks2008R2作為測試資料庫,隨便拉幾個Table。

image

很重要一定要Build,不然Domain Service的精靈一定找不到資料。

剛開始我不知道,是找了一二小時才發現這問題的,嘔死了。

 

新增Domain Service

Domain Service分類在Web下。

image

image

有一些設定如可否編輯,而MetaData是關係資料驗證與資料顯示如:DataGrid自己中文標題或驗證錯誤訊息等中繼資料,會額外在產生一個檔案以partial class方式增加。

image

事實上Domain Service Class只是精靈產生存取Linq的Code,如果事後Model有修改怎麼辦,目前只有砍檔案重新產生Domain Service Class,不過有看過一些文章說為用partial class方式分隔二個檔分別是自動產生與自己增加的,刪除時不會刪到人工增加的Code。

 

Silverlight存取Domain Service

這時Silverlight的專案可以看到自動產生的Code。

image

Code寫起來跟一般Linq的寫法很像,只是是非同步最後必需要用Load是取得資料。

image

比傳統WCF好的地方是,是送Query去取資料,彈性比較大。

 

Domain Service實作方式

 

 

它是WCF也是Web Service,只是自動產生的。

在Web.Config增加一個httpModules,當網址為Domain Service Class + .svc時處理。

image

如SilverlightRIA.Web.DomainService1會把 . 換成 - 加上.svc,如SilverlightRIA-Web-DomainService1.svc

image

而Silverlight專案會自動產生關連與Code。

 

參考資料

How to setup your DomainService using partial classes for easy maintenance