公告資訊

未經授權,禁止轉載網站文章與內容。如有需要可以跟我聯絡,謝謝!!




2010年6月1日 星期二

解決WCF RIA Services中,Entity Model改變DomainService不會同步更新的問題

WCF RIA Services 對於開發以資料為導向的Silverlight應用程式而言,是一個相當方便的工具。在Visual Studio 2010開發工具中,當建立好了一個Entity Model之後,若是資料庫的模型有修改過的話,你可以透過"Update Model from Database"的功能選項,將資料庫最新的定義更新到Entity Model中:

image

然而這一個動作只會更新Entity Model裡面資料時體的定義,並不會幫你在既有的Domain Service中針對這些資料實體新增Metadata定義及用戶端程式存取時所需要的指令。在WCF RIA 1.0當中,你可以試著用下面的步驟解決這一個問題:

1. 在Server端專案中加入一個新的DomainService定義檔

    這一個步驟的目標,是要透過Visual Studio 2010 開發工具,建立用戶端存取新的資料實體所需要的介面與中繼資料(metadata)。新的DomainService原始檔可以暫時先命名為TempDomainService.cs或是你可以識別的名稱:

image

接著在精靈中,設定DomainService類別的定義:

image

設定時注意兩個技巧:

(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維護的負擔。

沒有留言:

最新回應

Loading...

即時與版主對話


(若狀態顯示"忙碌"時,我可能無法馬上回應。你可以留下Email,我會盡快跟你聯絡,謝謝喔!!)