1. 程式人生 > >WCF RIA 服務 (三)- 建立一個RIA Services Solution

WCF RIA 服務 (三)- 建立一個RIA Services Solution

在本節,我們將進行一個演練。我們建立一個WCF RIA Services 應用,此應用從AdventureWorksLT 資料庫中檢索資料。我們會用SL來建立表現層的客戶端,並建立表現不同資料庫表的實體類。

此節需要:


  • Visual Studio 2008
  • Silverlight 3
  • WCF RIA Services Beta for visual Studio 2008 SP1

-or-

  • Visual Studio 2010 Beta 2
  • Silverlight 4 Beta
  • WCF RIA Services Preview for Visual Studio 2010
  • AdventureWorksLT sample database

建立包含RIA Services Link的解決方案

  1. 在 VS中,建立一個新的RIA Services專案,選擇 File->New->Project 。此時 出現新專案 對話方塊。
  2. 選擇Silverlight應用程式模板,並命名為 RIAServicesExample.
  3. 點選OK。出現New Silverlight Application對話框出現。
  4. 選 擇Enable WCF RIA Services選項框。現在將會在客戶端和服務端之間建立連線。
  5. 點選OK來建立解決方案。這個方案包含兩個專案:客戶端和服務端。客戶端被命名為 RIAServicesExample,其中有用來建立表示層的SL程式碼。服務端被命名為RIAServicesExample.Web,其中包含中間層 的程式碼。



建立資料模型 Data Models

在這部分, 建立表示來自AdventureWorksLT資料庫的資料的ADO.NET實體類。RIA Services與各種各樣的資料模型類和資料來源一起工作。

(注: 在VS2010中使用實體資料模型時,應該選擇Include foreign key columns in the model選項。當用實體資料模型嚮導時,這個選項是預設選擇的。還應該使用在程式集內嵌入的實體資料模型對映資訊的預設行為。)

---使 資料在中間層可利用

  1. 在解決方案資源管理器中,右鍵點選服務端專案 (RIAServicesExample.Web),選擇新增 ->新專案
    , 新增新專案對話方塊將出現。
  2. 在類別列表中,選擇資料 並選擇ADO.NET Entity Data Model 模板。
  3. 命名為AdventureWorksModel.edmx 並 點選新增。 出現實體資料模型嚮導。
  4. 選擇模型內容 中, 選擇 從資料庫生成 ,然後點選下一步
  5. 選 擇資料連線 中,建立到資料庫的資料連線並點選下一步
  6. 選 擇資料庫物件 裡,選擇 Address, Customer, CustomerAddress 表。
  7. 點 擊 完成 ,就為表生成了實體模型。
  8. 生成解決方案

創 建域服務Domain Service

在這節中,將新增一個對中間層的domain service。domain service 把服務端的資料實體和操作
向客戶端公開。可以在資料服務中加入商業邏輯來管理客戶端如何與資料互動。

---創 建domain service

  1. 右鍵點選服務端專案,選擇 新增-> 新專案
  2. 在列表中選擇 Web , 然後選擇 Domain Service Class 模型。
  3. 命名類為CustomerDomainService.cs(或 CustomerDomainService.vb)。
  4. 點選 新增 。 出現 新增新域服務類 對 話框。
  5. 選擇自定義 實體。
  6. 確定選了,Enable client access選項 , 選擇對應 自定的 Enable Editing選項。
  7. 點選 OK,就生成了domain service 類。
  8. 打 開CustomerDomainServie.cs檔案。會注意到檔案有如下屬性:
  • CustomerDomainService 類派生於LinqToEntitiesDomainService(TContex),這個基類是RIA Services框架內的一個抽象類。由於domain Services公開了ADO.NET 實體資料類,此基類是自動應用的。
  • 一 個泛型基類被繫結到上一步建立的實體類。
  • CustomerDomainService類被標記上 EnableClientAccess屬性,來指出這個類是可以被客戶層訪問的。
  • 生成了一個查詢方法。在VS2008中,這個 查詢叫做GetCustomer 。在VS2010Beta2中,這個查詢方法叫做GetCustomers。這個方法 返回沒有過濾和排序的所有項。
  • 還生成了 InsertCustomer, UpdateCustomer, DeleteCustomer 方法。

建立Silverlight客戶端

在 其他的演練中,將在domain service里加入商業邏輯。在本演練中,只是用生成的GetCustomers 方法。

由於在客戶 端和服務端存在著一個RIA Services Link,當生成解決方案時就會產生客戶代理類。這個代理類允許我們從客戶端訪問資料。

--- 檢視產生的客戶端代理類

  1. 生成解決方案
  2. 在解決方 案資源管理器中,在客戶端專案中點選顯示所有檔案 。注意到在Generated_Code資料夾中包含了一個程式碼文 件。




3. 開啟這個程式碼檔案。注意到檔案有下面的屬性:

  • 生 成一個派生於WebContextBase類的WebContext類。
  • 生成一個派生於DomainContext類的 CustomerDomianContext類。這個類中有一個叫做GetCustomersQuery(在VS2008中是 GetCustomerQuery)方法,它對應於在domain service中建立的查詢方法。
  • 生成一個派生於 Entity類的Customer類,此類對應著domain service公開的實體。這個客戶端的Customer實體類對應於服務端的Customer實體。

在 Silverlight客戶端中顯示資料

  1. 開啟 MainPage.xaml。
  2. 從 工具箱裡,拖拽一個DataGrid控制元件到Grid裡。當從工具箱中拖拽DataGrid控制元件時,會自動新增一個XML名稱空間和一個對資料程式集的引 用。如果你不是從工具箱中拖拽的DataGrid控制元件,你需要新增一個對System.Windows.Controls.Data程式集的引用和一個 XML名稱空間 xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
  3. 命 名這個控制元件為 CustomerGrid,如下面所示:

  4. 打 開MainPage.xaml的後臺程式碼檔案。
  5. 新增RIAServiceExample.Web名稱空間和 System.Windows.Ria名稱空間。RIAServices.Web名稱空間位於客戶端的生成程式碼裡。
  6. 新增 CustmerDomainContext例項,通過GetCustomerQuery方法來檢索資訊,並繫結到DataGrid控制元件,如下程式碼所示:
     
  7. 運 行應用程式。將會得到一個如下類似的表格: