WCF RIA 服務 (三)- 建立一個RIA Services Solution
阿新 • • 發佈:2019-01-30
在本節,我們將進行一個演練。我們建立一個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的解決方案
- 在
VS中,建立一個新的RIA Services專案,選擇 File->New->Project
。此時
出現新專案
對話方塊。
- 選擇Silverlight應用程式模板,並命名為
RIAServicesExample.
- 點選OK。出現New Silverlight Application對話框出現。
- 選
擇Enable WCF RIA Services選項框。現在將會在客戶端和服務端之間建立連線。
- 點選OK來建立解決方案。這個方案包含兩個專案:客戶端和服務端。客戶端被命名為 RIAServicesExample,其中有用來建立表示層的SL程式碼。服務端被命名為RIAServicesExample.Web,其中包含中間層 的程式碼。
建立資料模型 Data Models
在這部分,
建立表示來自AdventureWorksLT資料庫的資料的ADO.NET實體類。RIA Services與各種各樣的資料模型類和資料來源一起工作。
(注:
在VS2010中使用實體資料模型時,應該選擇Include foreign key columns in the
model選項。當用實體資料模型嚮導時,這個選項是預設選擇的。還應該使用在程式集內嵌入的實體資料模型對映資訊的預設行為。)
---使
資料在中間層可利用
- 在解決方案資源管理器中,右鍵點選服務端專案
(RIAServicesExample.Web),選擇新增
->新專案
- 在類別列表中,選擇資料
並選擇ADO.NET
Entity Data Model
模板。
- 命名為AdventureWorksModel.edmx
並
點選新增。
出現實體資料模型嚮導。
- 在 選擇模型內容
中,
選擇 從資料庫生成
,然後點選下一步
。
- 在 選
擇資料連線
中,建立到資料庫的資料連線並點選下一步
。
- 在 選
擇資料庫物件
裡,選擇 Address, Customer, CustomerAddress
表。
- 點
擊 完成
,就為表生成了實體模型。
- 生成解決方案
創
建域服務Domain Service
在這節中,將新增一個對中間層的domain service。domain
service 把服務端的資料實體和操作
向客戶端公開。可以在資料服務中加入商業邏輯來管理客戶端如何與資料互動。
---創
建domain service
- 右鍵點選服務端專案,選擇 新增->
新專案
。
- 在列表中選擇 Web
, 然後選擇 Domain
Service Class
模型。
- 命名類為CustomerDomainService.cs(或
CustomerDomainService.vb)。
- 點選 新增
。 出現 新增新域服務類
對
話框。
- 選擇自定義
實體。
- 確定選了,Enable
client
access選項
, 選擇對應 自定
義 的
Enable Editing選項。
- 點選 OK,就生成了domain service 類。
- 打 開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,當生成解決方案時就會產生客戶代理類。這個代理類允許我們從客戶端訪問資料。
---
檢視產生的客戶端代理類
- 生成解決方案
- 在解決方 案資源管理器中,在客戶端專案中點選顯示所有檔案 。注意到在Generated_Code資料夾中包含了一個程式碼文 件。
3. 開啟這個程式碼檔案。注意到檔案有下面的屬性:
- 生
成一個派生於WebContextBase類的WebContext類。
- 生成一個派生於DomainContext類的
CustomerDomianContext類。這個類中有一個叫做GetCustomersQuery(在VS2008中是
GetCustomerQuery)方法,它對應於在domain service中建立的查詢方法。
- 生成一個派生於 Entity類的Customer類,此類對應著domain service公開的實體。這個客戶端的Customer實體類對應於服務端的Customer實體。
在 Silverlight客戶端中顯示資料
- 開啟 MainPage.xaml。
- 從
工具箱裡,拖拽一個DataGrid控制元件到Grid裡。當從工具箱中拖拽DataGrid控制元件時,會自動新增一個XML名稱空間和一個對資料程式集的引
用。如果你不是從工具箱中拖拽的DataGrid控制元件,你需要新增一個對System.Windows.Controls.Data程式集的引用和一個
XML名稱空間
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
- 命 名這個控制元件為 CustomerGrid,如下面所示:
- 打
開MainPage.xaml的後臺程式碼檔案。
- 新增RIAServiceExample.Web名稱空間和
System.Windows.Ria名稱空間。RIAServices.Web名稱空間位於客戶端的生成程式碼裡。
- 新增
CustmerDomainContext例項,通過GetCustomerQuery方法來檢索資訊,並繫結到DataGrid控制元件,如下程式碼所示:
- 運 行應用程式。將會得到一個如下類似的表格: