RIA Services 类库允许我们创建能够重复使用的中间层和表现层逻辑。然而,使用RIA Services类库要比创建RIA Services解决方案复杂的多。
在本节演练中,将创建一个拥有RIA Services类库代码的SL应用程序。简单起见,把类库放在了SL应用程序相同的解决方案里。当然,类库也可以放在分开的解决方案中。
创建包含WCF RIA Services类库的SL解决方案
- 在VS中,创建一个命名为ExampleSilverlightApp的新SL应用程序。
- 在 新Silverlight 应用程序 对话框中,不要勾选 WCF RIA Services 选项。这个应用程序不需要SL客户端和服务端之间的RIA Services link,因为这个RIA Services link将放在类库中。
- 在资源管理器中,右键点击解决方案,选择 添加->新建项目 。 出现添加新项目 对话框。
- 在 Silverlight类型中,选择WCF RIA Services Class Library 模板并命名为 AdvertureWorksClassLibrary。
- 点击OK。在解决方案中将包含四个项目,如下所示:
- 右键点击 ExampleSilverlightApp.Web 项目,并选择 添加引用 。 添加引用对话框出现。
- 在 项目 标签中,选择 AdventureWorksClassLibrary.Web 项目,点击 OK。
- 右键点击 ExampleSilverlightApp 项目,选择 添加引用 。
- 在 项目 标签中, 选择 AdventureWorksClassLibrary 项目,点击 OK。
创建中间层库
- 在 AdventureWorksClassLibrary.Web项目中,添加一个名为 AdventureWorksModel.edmx的 ADO.NET Entity Data Model。
- 在实体数据模型向导中,把 Product 表加到实体模型中。
- 生成解决方案。
- 右键点击 AdventureWorksClassLibrary.Web项目,选择 添加->新项 。
- 选择 Domain Service Class 模板,并命名为ProductsDomainService。
- 点击 添加 。 出现 添加新域服务类 对话框。
- 从domain service中提供的数据模型中选择 Product , 并点击 OK 。
- 生成解决方案。
- 在解决方案中,对每个项目选择 显示所有文件-Show All Files 。我们可以发现仅在AdventureWorksClassLibrary项目中存在Generated_Code文件夹。虽然没有为 ExampleSilverlightApp项目生成代码,但我们仍可以使用在AdventureWorksClassLibrary项目中生成的代码。因为在ExampleSilverlightApp项目和AdventureWorksClassLibrary项目间存在项目引用。
在 SL项目中使用生成的代码
- 右键点击 ExampleSilverlightApp项目,选择 添加引用 。
- 添加对 System.Windows.Ria 程序集的引用。通过导航到[Program Files]\Microsoft SDKs\RIA Services\v1.0\Livryries\Silverlight, 可以找到这个程序集。
- 在 ExampleSilverlightApp项目中,打开MainPage.xaml文件。
- 从工具箱中,拖拽DataGrid 控件到Grid内。 这会自动添加一个XML命名空间和一个数据程序集引用。
- 命名DataGrid为 ProductsGrid, 如下所示:
代码
1
<
usercontrol
class
="RIAServicesExample.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x
="http://schemas.microsoft.com/winfx/2006/xaml"
d
="http://schemas.microsoft.com/expression/blend/2008"
mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
ignorable
="d"
designwidth
="400"
designheight
="300"
>
2
3 < grid background ="White" name ="LayoutRoot" >
4 < data:datagrid name ="ProductsGrid" ></ data:datagrid >
5 </ grid >
6 </ usercontrol >
2
3 < grid background ="White" name ="LayoutRoot" >
4 < data:datagrid name ="ProductsGrid" ></ data:datagrid >
5 </ grid >
6 </ usercontrol >
6. 打开MainPage.xaml的后台代码。
7. 添加下面的代码来检索产品。
代码
1
using
System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using AdventureWorksClassLibrary.Web;
13 using System.Windows.Ria;
14
15 namespace ExampleSilverlightApp
16 {
17 public partial class MainPage : UserControl
18 {
19 private ProductDomainContext _productContext = new ProductDomainContext();
20
21 public MainPage()
22 {
23 InitializeComponent();
24
25 LoadOperation < product > loadOp = this ._productContext.Load( this ._productContext.GetProductsQuery());
26 ProductsGrid.ItemsSource = loadOp.Entities;
27 }
28 }
29 }
30 </ product >
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using AdventureWorksClassLibrary.Web;
13 using System.Windows.Ria;
14
15 namespace ExampleSilverlightApp
16 {
17 public partial class MainPage : UserControl
18 {
19 private ProductDomainContext _productContext = new ProductDomainContext();
20
21 public MainPage()
22 {
23 InitializeComponent();
24
25 LoadOperation < product > loadOp = this ._productContext.Load( this ._productContext.GetProductsQuery());
26 ProductsGrid.ItemsSource = loadOp.Entities;
27 }
28 }
29 }
30 </ product >
8. 打开AdventureWorksClassLibrary.Web项目中的App.Config文件,分别拷贝<connectionStrings>,<system.serviceModel>, 和<httpModules>元素。把它们粘贴到ExampleSilverlightApp.Web项目的Web.config文件中。现在Web.config文件看上去和下面的代码类似,当然你应该提供和你的环境相关的链接信息。
代码
1
<
configuration
>
2 < connectionstrings >
3 < add name ="AdventureWorksLT2008Entities" string ="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True" connectionstring ="'metadata=" providername ="System.Data.EntityClient" provider ="System.Data.SqlClient;provider" >
4 </ add >
5 < system.servicemodel >
6 < servicehostingenvironment aspnetcompatibilityenabled ="true" >
7 </ servicehostingenvironment >
8 < system.web >
9 < compilation debug ="true" targetframework ="4.0" >
10 < httpmodules >
11 < add name ="DomainServiceModule" type ="System.Web.Ria.Services.DomainServiceHttpModule, System.Web.Ria, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" >
12 </ add >
13 </ httpmodules >
14 < system.webserver >
15 < modules runallmanagedmodulesforallrequests ="true" >
16 </ modules >
17
18 </ system.webserver >
19
20 </ compilation ></ system.web ></ system.servicemodel ></ connectionstrings ></ configuration >
21 < configuration >
22 < connectionstrings >
23 < add name ="AdventureWorksLT2008Entities" string ="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True" connectionstring ="'metadata=" providername ="System.Data.EntityClient" provider ="System.Data.SqlClient;provider" >
24 </ add >
25 < system.servicemodel >
26 < servicehostingenvironment aspnetcompatibilityenabled ="true" >
27 </ servicehostingenvironment >
28 < system.web >
29 < compilation debug ="true" targetframework ="4.0" >
30 < httpmodules >
31 < add name ="DomainServiceModule" type ="System.Web.Ria.Services.DomainServiceHttpModule, System.Web.Ria, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" >
32 </ add >
33 </ httpmodules >
34 < system.webserver >
35 < modules runallmanagedmodulesforallrequests ="true" >
36 </ modules >
37
38 </ system.webserver >
39
40 </ compilation ></ system.web ></ system.servicemodel ></ connectionstrings ></ configuration >
41
2 < connectionstrings >
3 < add name ="AdventureWorksLT2008Entities" string ="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True" connectionstring ="'metadata=" providername ="System.Data.EntityClient" provider ="System.Data.SqlClient;provider" >
4 </ add >
5 < system.servicemodel >
6 < servicehostingenvironment aspnetcompatibilityenabled ="true" >
7 </ servicehostingenvironment >
8 < system.web >
9 < compilation debug ="true" targetframework ="4.0" >
10 < httpmodules >
11 < add name ="DomainServiceModule" type ="System.Web.Ria.Services.DomainServiceHttpModule, System.Web.Ria, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" >
12 </ add >
13 </ httpmodules >
14 < system.webserver >
15 < modules runallmanagedmodulesforallrequests ="true" >
16 </ modules >
17
18 </ system.webserver >
19
20 </ compilation ></ system.web ></ system.servicemodel ></ connectionstrings ></ configuration >
21 < configuration >
22 < connectionstrings >
23 < add name ="AdventureWorksLT2008Entities" string ="Data Source=example;Initial Catalog=AdventureWorksLT2008;Integrated Security=True;MultipleActiveResultSets=True" connectionstring ="'metadata=" providername ="System.Data.EntityClient" provider ="System.Data.SqlClient;provider" >
24 </ add >
25 < system.servicemodel >
26 < servicehostingenvironment aspnetcompatibilityenabled ="true" >
27 </ servicehostingenvironment >
28 < system.web >
29 < compilation debug ="true" targetframework ="4.0" >
30 < httpmodules >
31 < add name ="DomainServiceModule" type ="System.Web.Ria.Services.DomainServiceHttpModule, System.Web.Ria, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" >
32 </ add >
33 </ httpmodules >
34 < system.webserver >
35 < modules runallmanagedmodulesforallrequests ="true" >
36 </ modules >
37
38 </ system.webserver >
39
40 </ compilation ></ system.web ></ system.servicemodel ></ connectionstrings ></ configuration >
41
9. 运行应用程序。看到如下结果。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2010/04/08/5461309.aspx