天天看点

Microsoft .NET RIA Services快速上手

传统的RIA是怎样操作数据的

在去年这个时候,Silverlight 2Beta刚发布,有个朋友问我能不能使用Silverlight直接操作数据库。当时的答案当然是:很遗憾,不行。我们不得不使用大量的Web Services或者WCF来提供对数据库操作的每一个环节,Silverlight只能与数据层“间接接触”。

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/image_2.png"></a>

上图表明了整个过程。这样的数据操作虽然已经被大家习惯,但它是不合理的。就像是在实现“三通”以前,咱们去台湾只能先去香港转机。

这是因为,这样的“间接接触”,不仅不直观,还浪费了开发者大量的经理去考虑一些不该考虑的问题。开发者需要在客户端、Web Service端,BLL端各写一个不同版本的数据操作代码,并且还要考虑他们之间交互的安全性、网络情况等等,简直就是一个浪费大量ATP只产生微量GDP的过程。

合理的数据操作应该怎样的

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/image_4.png"></a>

上图展示了微软在RIA与数据库交互上的宏伟构想:无论是Silverlight,WPF,Javascript,还是ASP.NET,WCF,它们都应该使用无差别的数据逻辑,能够直接访问到数据层面,而不需要通过一层类似“代理”的数据服务。

Microsoft .NET RIA Services将如何实现“合理”

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/image_6.png"></a>

以上就是.NET RIA Services的实现原理。开发者在ASP.NET端的数据处理类(本图中是HRService)继承自一个叫做DomainService的类,在里面实现一些数据操作。.NET RIA Services就会自动生成相应的客户端类(本图中是HRContext)。而在我们开发客户端的时候,我们就可以直接调用.NET RIA Services生成的那个类,直接操作数据层面。

入门实例:

在了解.NET RIA Services想要完成的任务及其具体实现方法后,我们可以开始通过实例的方式来体验一下了。

在VS2008中新建Silverlight项目

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/%E6%97%A0%E6%A0%87%E9%A2%98_2.jpg"></a>

将Silverlight连接到ASP.NET Server project上

完成该步骤后的Solution Explorer如下图所示

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/%E6%97%A0%E6%A0%87%E9%A2%983_2.jpg"></a>

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/%E6%9C%AA%E5%91%BD%E5%90%8D4_2.jpg"></a>

选择SQL Server2005里的数据库和表。VS会帮我们生成一个ADO.NET的实体(Entity)。

编译整个Solution。

根据提示勾选需要的部分。在本例中,我们选择了Messages表作为实体,并选择”Enable editing”,这样在生成的类中会初始包括Get,Insert,Update,Delete 4个基本的实体操作方法

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/%E6%9C%AA%E5%91%BD%E5%90%8D8_2.jpg"></a>

完成上面的操作后,会在Web项目下生成RdChat_DomainService.cs类。

Microsoft .NET RIA Services快速上手

Code

再次编译整个Solution。

点击Show All Files,你会发现系统已经为你生成了客户端的类,放在了Generated_Code目录下。我们将它include进来。

这个RiaServices_1.Web.g.cs,是服务端RdChat_DomainService.cs的对应客户端版本。它包含了所有服务端版本类中定义的方法、实体等,而可在客户端直接调用。它打代码如下:

Microsoft .NET RIA Services快速上手

包括一个DataGrid ,TextBox和Button。在按钮中添加Click方法。 

<a></a>

Microsoft .NET RIA Services快速上手

&lt;UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="RiaServices_1.MainPage"

Microsoft .NET RIA Services快速上手

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

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

Microsoft .NET RIA Services快速上手

    Width="640" Height="450"&gt;

Microsoft .NET RIA Services快速上手

    &lt;Grid x:Name="LayoutRoot" Background="White"&gt;

Microsoft .NET RIA Services快速上手

        &lt;StackPanel Orientation="Vertical"  Height="420"&gt;

Microsoft .NET RIA Services快速上手

            &lt;data:DataGrid x:Name="dataGrid" &gt;&lt;/data:DataGrid&gt;

Microsoft .NET RIA Services快速上手

            &lt;StackPanel Orientation="Horizontal" Height="25"&gt;

Microsoft .NET RIA Services快速上手

                &lt;TextBox x:Name="txtMsg" Text=" " Width="580"  &gt;&lt;/TextBox&gt;

Microsoft .NET RIA Services快速上手

                &lt;Button x:Name="btnSend" Content="发送消息"  Click="btnSend_Click"  &gt;&lt;/Button&gt;

Microsoft .NET RIA Services快速上手

            &lt;/StackPanel&gt;

Microsoft .NET RIA Services快速上手

        &lt;/StackPanel&gt;

Microsoft .NET RIA Services快速上手

    &lt;/Grid&gt;

Microsoft .NET RIA Services快速上手

&lt;/UserControl&gt;

Microsoft .NET RIA Services快速上手

初始时,将所有已有的数据绑定到DataGrid中。

点击Click方法后,将添加一条新数据到数据库,并刷新外观使新数据显示出来。

在这个过程中,我们直接使用.NET RIA Services为你生成的客户端版本数据处理类了!很爽吧? 

Microsoft .NET RIA Services快速上手

using System;

Microsoft .NET RIA Services快速上手

using System.Collections.Generic;

Microsoft .NET RIA Services快速上手

using System.Linq;

Microsoft .NET RIA Services快速上手

using System.Net;

Microsoft .NET RIA Services快速上手

using System.Windows;

Microsoft .NET RIA Services快速上手

using System.Windows.Controls;

Microsoft .NET RIA Services快速上手

using System.Windows.Documents;

Microsoft .NET RIA Services快速上手

using System.Windows.Input;

Microsoft .NET RIA Services快速上手

using System.Windows.Media;

Microsoft .NET RIA Services快速上手

using System.Windows.Media.Animation;

Microsoft .NET RIA Services快速上手

using System.Windows.Shapes;

using RiaServices_1.Web;

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

namespace RiaServices_1

{

Microsoft .NET RIA Services快速上手

    public partial class MainPage : UserControl

    {

Microsoft .NET RIA Services快速上手

        public MainPage()

Microsoft .NET RIA Services快速上手

        {

            InitializeComponent();

Microsoft .NET RIA Services快速上手

            RdChat_DomainContext context = new RdChat_DomainContext();

Microsoft .NET RIA Services快速上手

            dataGrid.ItemsSource = context.Messages;

Microsoft .NET RIA Services快速上手

            context.LoadMessages();

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

        }

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

        private void btnSend_Click(object sender, RoutedEventArgs e)

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

            Messages msg=new Messages();

Microsoft .NET RIA Services快速上手

            msg.Body=txtMsg.Text;

Microsoft .NET RIA Services快速上手

            msg.Name="匿名用户";

Microsoft .NET RIA Services快速上手

            msg.PartitionKey = Guid.NewGuid().ToString();

Microsoft .NET RIA Services快速上手

            msg.RowKey = "slChat";

            msg.Timestamp = DateTime.Now;

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

            context.Messages.Add(msg);

Microsoft .NET RIA Services快速上手

            context.SubmitChanges();

Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手
Microsoft .NET RIA Services快速上手

    }

Microsoft .NET RIA Services快速上手

}

Microsoft .NET RIA Services快速上手

F5  运行之! 

<a href="https://images.cnblogs.com/cnblogs_com/azure/WindowsLiveWriter/Microsoft.NETRIAServices_BD45/%E6%9C%AA%E5%91%BD%E5%90%8D12_2.jpg"></a>

怎样?非常方便吧?其实这只是一个非常简易的实例而已, .NET RIA Services还包括了许许多多强大的功能,包括metadata,shared code等等等等,请感兴趣的读者自行阅读SDK吧,那是一件非常享受的事情。

本文转自 流牛木马 博客园博客,原文链接:http://www.cnblogs.com/azure/archive/2009/03/29/1424239.html,如需转载请自行联系原作者