zoukankan      html  css  js  c++  java
  • 演练:创建一个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.运行这个应用程序。

    待续……

  • 相关阅读:
    认识ASP.NET 中的 AppDomain
    试验总结1 改变递归函数中的执行内容
    试验总结2 break与continue
    开篇的话
    01复杂度3 二分查找
    02线性结构2 一元多项式的乘法与加法运算
    01复杂度2 Maximum Subsequence Sum
    02线性结构4 Pop Sequence
    01复杂度1 最大子列和问题
    02线性结构1 两个有序链表序列的合并
  • 原文地址:https://www.cnblogs.com/lovecode/p/1643425.html
Copyright © 2011-2022 走看看