演练:创建一个RIA Services解决方案(译文)
2010-01-10 10:57 张智清 阅读(804) 评论(1) 编辑 收藏 举报因本人可怜的英文,难免译文不甚确切,只能作为自我理解而已,如有不当还请各位大大海涵指正。
[注:本主题为预先发布的文档,在将来正式版中有可能改变。空白主题作为占位符被包含。]
在这个演练中,你将创建一个WCF RIA服务应用程序检索AdventureWorksLT数据库。这里你将用Silverlight创建客户端表现层。你将建立一个实体类来表示各个数据库表。本演练可作为其他演练的起点。
-
先决条件
-
Visual Studio 2008 + Silverlight 3 + WCF RIA Services Beta for Visual Studio 2008 SP1+AdventureWorksLT 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.运行这个应用程序。
待续……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架