演练:创建一个RIA Services解决方案(译文)

因本人可怜的英文,难免译文不甚确切,只能作为自我理解而已,如有不当还请各位大大海涵指正。

    [注:本主题为预先发布的文档,在将来正式版中有可能改变。空白主题作为占位符被包含。]

    在这个演练中,你将创建一个WCF RIA服务应用程序检索AdventureWorksLT数据库。这里你将用Silverlight创建客户端表现层。你将建立一个实体类来表示各个数据库表。本演练可作为其他演练的起点。

  • 先决条件
  1. Visual Studio 2008 + Silverlight 3 + WCF RIA Services Beta for Visual Studio 2008 SP1AdventureWorksLT sample database

        或

  • Visual Studio 2010 + Silverlight 4 + WCF RIA Services Beta for Visual Studio 2010 + AdventureWorksLT sample database
  • 创建一个用RIA Services作为项目之间联系的解决方案

    建立一个RIA Services解决方案

    1. 在Visual Studio中通过菜单"文件"->"新建"->"项目"来选择创建一个RIA Services工程项目。"新建项目"对话框出现。

    2.选择"Silverlight应用程序"模板来创建项目,本演练中命名为"RIAServicesExample"。

    3. 点击"确定"。"新建Silverlight应用程序"对话框出现。

    4. 勾选对话框底部选项"启用.NET RIA服务"。通过勾选这一项,就可建立一个RIA Services连接起客户端项目和服务端项目。

    5. 点击"确定"按钮即已创建了这个解决方案。

    这个解决方案中包含两个工程项目:一个客户端项目和一个服务端项目。这个客户端项目被命名为RIAServicesExample,里面包含了建立表现层所用到的Silverlight代码。服务端项目命名为RIAServicesExample.Web,包含了中间层代码。

  • 创建一个数据模型Data Models

    在这一节中,你将创建ADO.NET实体类来表示AdventureWorksLT数据库中的数据。RIA Services与各种数据模型和数据源一起工作。

    注意:当在Visual Studio 2010下用实体数据模型时,必须选择在模型项中含有外键的列。当用实体数据模型向导建立时,默认地这个选项已被选上。你也必须用默认行为嵌入实体数据模型映射信息到程序集中。

    在中间层构建可用数据实体

    1.在解决方案浏览器中,右键点击服务端项目(RIAServicesExample.Web),选择"添加"->"添加新项",出现"添加新项"对话框。

    2.在"类别"列表中选择"数据",然后在模板项中选择"ADO.NET Entity Data Model"模板。

    3.命名为AdventureWorksModel.edmx,点击"添加"按钮则"实体数据模型向导"对话框出现。

    4.在"选择模型内容"屏幕上,选择"从数据库生成"项,然后点击"下一步"按钮。

    5.在"选择您的数据连接"屏幕上,创建一个到数据库的连接,然后点击"下一步"。

    6.在"选择您的数据库对象"屏幕上,选择Address,Customer和CustomerAddress表。

    7.点击"完成"按钮,则这些表的实体模型已建立。

    8.编译整个解决方案。

  • 创建一个领域服务Domain Service

    在这一节中,你将添加一个领域服务到中间层项目中。领域服务暴露了数据实体和服务端到客户端的操作。你可以添加业务逻辑到领域服务来管理客户端与数据的交互。

    建立领域服务

    1.右键点击服务端项目,选择"添加"->"添加新项"。

    2.在类别列表中,选择"Web",然后在右边模板中选择"Domain Service Class"模板。

    3.命名为CustomerDomainService.cs(或者CustomerDomainService.vb)。

    4.点击"添加"按钮,出现"Add New Domain Service Class"对话框。

    5.选择Customer实体。

    6.确认已勾选"Enable client access",并且对Customer实体勾选"Enable Editing"。

    7.点击"确定"按钮,这Domain Service类即生成了。

    8.打开生成的CustomerDomainService.cs(或CustomerDomainService.vb)文件。

    注意:这个文件有以下特征:

    • CustomerDomainService类派生自RIA Services架构中的一个抽象基类LinqToEntitiesDomainService(TContext),因为Domain Service公开了一个ADO.NET实体数据类,所以这个基类就被自动用到。
    • 一个通用基类被绑定到前一步骤创建的实体类中。
    • CustomerDomainService类标记了EnableClientAccess()属性则表明该类对于客户端是可见的。
    • 一个查询方法以生成。在Visual Studio 2008中,该查询方法被命名为GetCustomer。在Visual Studio 2010 Beta2中被命名为GetCustomers。这个方法的返回的每一项都不带任何筛选或排序。
    • 插入、更新和删除记录的方法也已生成。(因为勾选了Enable Editing)
  • 创建Silverlight客户端

    在其他演练中,你要添加业务逻辑到领域服务(Domain Service)中。对于本演练,正好只用到默认生成的GetCustomers方法。

    因为一个RIA Services连接已存在于客户端项目和服务端项目之间,当编译这个解决方案时client proxy classes类已生成。这些客户代理类允许从客户端访问数据。

    ◆看看生成的客户代理类

    1.编译解决方案

    2.在解决方案浏览器中,点击客户端项目选择"显示所有文件"。注意Generated_Code文件夹中包含的代码文件。

    3.打开Generated_Code文件夹下的这个代码文件,注意这个文件有以下特征:

    一个继承自WebContextBase类的WebContext类已生成。

    一个继承自DomainContext类的CustomerDomainContext类已生成。这个类有个名为GetCustomersQuery方法(或在Visual Studio 2008中为GetCustomerQuery方法),对应于领域服务中建立的查询方法。

    一个继承自Entity类的Customer类已生成。这个实体揭露了领域服务。在客户端项目中的这个Customer实体类匹配服务端的Customer实体。

    ◆在Silverlight客户端显示数据

    1.打开MainPage.xaml文件

    2.在Grid元素中拖放进一个DataGrid控件。

    当从工具箱中拖放进DataGrid控件时,其相应的命名空间及程序集引用都自动添加上。如果不是从工具箱拖放进DataGrid,则必须手工添加一个程序集引用:System.Windows.Controls.Data,并在XML命名空间声明中做以下声明:xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

    3.命名这个DataGrid为CustomerGrid。

    <UserControl

    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

    x:Class="RIAServicesExample.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    d:DesignHeight="300" d:DesignWidth="400">

     

    <Grid x:Name="LayoutRoot" Background="White">

    <data:DataGrid Name="CustomerGrid"></data:DataGrid>

    </Grid>

    </UserControl>

    4.打开MainPage.xaml文件的后台代码文件。

    5.添加RIAServicesExample.Web命名空间和System.Windows.Ria命名空间

    6.添加代码到CustomerDomainContext实例,通过调用GetCustomersQuery方法检索customers,然后将结果绑定到DataGrid中。看以下代码示例:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Net;

    using System.Windows;

    using System.Windows.Controls;

    using System.Windows.Documents;

    using System.Windows.Input;

    using System.Windows.Media;

    using System.Windows.Media.Animation;

    using System.Windows.Shapes;

    using RIAServicesExample.Web;

    using System.Windows.Ria;

     

    namespace RIAServicesExample

    {

    public partial class MainPage : UserControl

    {

    private CustomerDomainContext _customerContext = new CustomerDomainContext();

     

    public MainPage()

    {

    InitializeComponent();

     

    LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());

    CustomerGrid.ItemsSource = loadOp.Entities;

    }

    }

    }

    7.运行这个应用程序。

待续……

原文地址:https://www.cnblogs.com/lovecode/p/1643425.html