WCF RIA Services 對於開發以資料為導向的Silverlight應用程式而言,是一個相當方便的工具。在Visual Studio 2010開發工具中,當建立好了一個Entity Model之後,若是資料庫的模型有修改過的話,你可以透過"Update Model from Database"的功能選項,將資料庫最新的定義更新到Entity Model中:
然而這一個動作只會更新Entity Model裡面資料時體的定義,並不會幫你在既有的Domain Service中針對這些資料實體新增Metadata定義及用戶端程式存取時所需要的指令。在WCF RIA 1.0當中,你可以試著用下面的步驟解決這一個問題:
1. 在Server端專案中加入一個新的DomainService定義檔
這一個步驟的目標,是要透過Visual Studio 2010 開發工具,建立用戶端存取新的資料實體所需要的介面與中繼資料(metadata)。新的DomainService原始檔可以暫時先命名為TempDomainService.cs或是你可以識別的名稱:
接著在精靈中,設定DomainService類別的定義:
設定時注意兩個技巧:
(1) Domain service class name請設為原本的Domain Service類別名稱。
(2) Entities 請選擇需要加入的資料實體定義即可,其他的不用選。
完成之後按下OK按鈕,開發工具會建立新的DomainService定義檔。
2. 開啟新的DomainService類別原始檔(以這個例子來說是TempDomainService.cs),刪除類別前面的"[EnableClientAccess()]"標籤,並且使用partial關鍵字將該DomainService宣告為部分類別。
3. 開啟既有的DomainService類別原始檔(以這個例子來說是MessageWallDomainService.cs),使用partial關鍵字將該DomainService宣告為部分類別 (但是不可以刪除類別前面的"[EnableClientAccess()]"標籤)。
接下來重新編譯Server端及Client端專案的程式,你就會可以從Silverlight應用程式中去存取Entity Model中新的資料實體了!
我不確定在下一版的WCF RIA Services開發工具中會不會修正這一個問題,不過透過部分類別來建立DomainServices,只要你的類別命名規則夠清楚,某種程度來說,也不會增加太多DomainService維護的負擔。
沒有留言:
張貼留言