天天看點

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,如需轉載請自行聯系原作者

繼續閱讀