技术开发 频道

Silverlight 3 RIA服务与ADO.NET集成

  3.使用域服务封装业务逻辑

  (1)仍然右键单击web工程ProductsWithDataService.Web,在弹出菜单中选择“添加|新建项”命令。在随后出现的“添加新项”对话框中选择“Domain Service Classes”模板添加一个域服务,输入名称ProductsDomain.csl,最后单击“添加”按钮退出。

  (2)在随后出现的“Add New Domain Service Class”对话框。在对话框中选择Product实体,并确保选择了“Enable Editing”复选按钮。最后,再选择对话框最下部的“Generate associated classes for metadata”复选按钮,以保证在元数据中生成相关联的类。

  (3)最后,选择菜单“生成|重新生成解决方案”。

  随后打开的ProductsDomain服务类自动生成了针对Product实体集的基本CRUD操作的雏形(换句话说,在实际开发中,我们可以添加自定义的逻辑来重构这里的查询,插入,更新以及删除操作)。而且注意到,因为在上面我们勾选了“Enable client access”复选按钮,所以系统自动在类ProductsDomain的前面添加了一个[EnableClientAccess]属性;这意味着,此类将把自己的方法暴露给客户层使用。

  至此,我们已经搭起一个基本的Silverlight应用的服务器端框架。接下来,我们讨论Silverlight用户界面相关编程。

  4.Silverlight用户界面及基本后台代码编程

  其实,从分层角度来看,就客户端Silverlight项目这边来看,也可进一步分为若干子层。例如,.xaml文件可看作最上面的展示层,相应的后台代码文件.xaml.cs则又是一层。

  (一)XAML设计

  Silverlight 3项目自动生成的主页面文件为MainPage.xaml。现在,打开此文件,并输入如下标记代码:

<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="ProductsWithDataService.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:DesignWidth="Auto" d:DesignHeight="Auto">
  
<Grid x:Name="LayoutRoot">
    
<Grid.RowDefinitions>
        
<RowDefinition Height="1*" />
        
<RowDefinition Height="20" />
    
</Grid.RowDefinitions>
    
<data:DataGrid x:Name="productGrid" AutoGenerateColumns="true" Grid.Row="0" />
</Grid>
</UserControl>

  上面的XAML代码非常简单,不再赘述。

  相应的后台代码文件MainPage.xaml.cs的内容如下所示:  

//……(省略默认命名空间引用)
//下面是新添加的命名空间引用
using ProductsWithDataService.Web;
using System.Windows.Ria.Data;
namespace ProductsWithDataService
{
    
public partial class MainPage : UserControl
    {
        ProductsDomain _domain
= new ProductsDomain();
        
public MainPage()
        {
            InitializeComponent();
            this._domain.Load(this._domain.GetProductQuery());
            this.productGrid.ItemsSource
= _domain.Products;
        }
    }
}
0
相关文章