傳統的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類。
Code
再次編譯整個Solution。
點選Show All Files,你會發現系統已經為你生成了用戶端的類,放在了Generated_Code目錄下。我們将它include進來。
這個RiaServices_1.Web.g.cs,是服務端RdChat_DomainService.cs的對應用戶端版本。它包含了所有服務端版本類中定義的方法、實體等,而可在用戶端直接調用。它打代碼如下:
包括一個DataGrid ,TextBox和Button。在按鈕中添加Click方法。
<a></a>
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="RiaServices_1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640" Height="450">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Vertical" Height="420">
<data:DataGrid x:Name="dataGrid" ></data:DataGrid>
<StackPanel Orientation="Horizontal" Height="25">
<TextBox x:Name="txtMsg" Text=" " Width="580" ></TextBox>
<Button x:Name="btnSend" Content="發送消息" Click="btnSend_Click" ></Button>
</StackPanel>
</StackPanel>
</Grid>
</UserControl>
初始時,将所有已有的資料綁定到DataGrid中。
點選Click方法後,将添加一條新資料到資料庫,并重新整理外觀使新資料顯示出來。
在這個過程中,我們直接使用.NET RIA Services為你生成的用戶端版本資料處理類了!很爽吧?
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 RiaServices_1.Web;
namespace RiaServices_1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
RdChat_DomainContext context = new RdChat_DomainContext();
dataGrid.ItemsSource = context.Messages;
context.LoadMessages();
}
private void btnSend_Click(object sender, RoutedEventArgs e)
Messages msg=new Messages();
msg.Body=txtMsg.Text;
msg.Name="匿名使用者";
msg.PartitionKey = Guid.NewGuid().ToString();
msg.RowKey = "slChat";
msg.Timestamp = DateTime.Now;
context.Messages.Add(msg);
context.SubmitChanges();
}
}
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,如需轉載請自行聯系原作者