天天看點

Silverlight RIA Services Class Library類庫使用1

上午整理了silverlight business application商業模闆的結構.這個模闆我在Silverlight 2.0版本以前是沒有見過. 微軟是從Silverlight 3.0版本中添加進來. 當時釋出正式版提出一個廣告語叫"See the light", 在SL一個論壇上找到以前這個廣告的宣傳配圖.

<a href="http://blog.51cto.com/attachment/201201/100733208.jpg" target="_blank"></a>

在以前微軟SL宣傳中使用另外一個"Silverlight up on your web"廣告語 這口氣 有點霸道吧. 做過MVC架構開發朋友應該都感覺到這和MVC顯示層架構 有點像.頁面比較幹淨. 出的樣式也比較接近. 但對這個模闆的結構 隻做了初步了解. 這方面資料也很少. 轉入正題Silverlight RIA Services Class Library類庫使用.

A:Silverlight RIA Services Class Library類庫

主要是可以建立可重複使用的中間層和表示層邏輯.但是它的建立比建立一個RIA Service 解決方案要麻煩一點. 當我們建立一個普通的Silverlight Application.如果啟用Enable WCF RIA Service.這個選項, 就是通過Silverlight Client同Server Project 建立一個 Ria Service Link關聯.而Silverlight RIA Services Class Library類庫 恰恰分離這種預設Ria Service Link關聯.把這種關系獨立出來.大緻如下下圖:

<a href="http://blog.51cto.com/attachment/201201/100738427.png" target="_blank"></a>

B:建立Silverlight RIA Services Class Library類庫

首先建立一個普通的Silverlight Application項目. 注意在建時 因為我們采用的Silverlight RIA Services Class Library來隔離RIa Service Link關系. 是以Enable WCF Ria Service 這個選項不選中即建立時不啟用Ria SErvice.

<a href="http://blog.51cto.com/attachment/201201/100745152.png" target="_blank"></a>

建立完成後再解決方案中添加Silverlight RIA Services Class Library類庫項目,完成解決方案項目結構:

<a href="http://blog.51cto.com/attachment/201201/100751212.png" target="_blank"></a>

在HROAServicelibDate檔案夾下多了兩個項目HROAServicelibDate和HROAServicelibDate.Web. 既然是通過類庫來建立Ris Service Link關聯就需要添加項目引用. 引用順序和規則:

<a href="http://blog.51cto.com/attachment/201201/100757500.png" target="_blank"></a>

從上圖就能看出Ria Service Link關聯關系建立, 在引用上可以看出是相對應的:

TestCreateServiceLib.Web引用類庫中HROAServicelibDate.Web.

TestCreateServiceLib引用類庫中HROAServiceDate.

Ria Service Link關聯關系建立完成 重寫生成解決方案. 當我們把這層關系獨立出來後.那麼原來的編碼習慣也随着改變. 以前把資料通路的Data Entity和Domain Service都存放在Server Client即TestCreateServiceLib.Web項目中. 現在則可以放在類庫中HROAServicelibDate.Web項目中.現在HROAServicelibDate.Web中添加一個WorkBill實體資料通路[一個實體和一個Domain Service].重寫編譯解決方案 來檢視所有檔案:

<a href="http://blog.51cto.com/attachment/201201/100803615.png" target="_blank"></a>

原來存放Generated_Code檔案夾由原來的預設方式TestCreateServiceLib項目中轉移到HROAServiceDate中.由此你應該能看出Generated_Code檔案夾轉移是随着Ria Service Link關系而同步變動.雖然沒有代碼是為TestCreateServiceLib項目産生,但在HROAServiceDate和TestCreateServiceLib項目之間建立引用關系.依然可以使用TestCreateServiceLib生成的代碼.

C:如上以類庫方式來通路資料:

先在TestCreateServiceLib添加 System.ServiceModel.DomainServices.Client 引用[預設是未添加的].預設在SDK目錄下: [Program Files]\Microsoft SDKs\RIA Services\v1.0\Libraries\Silverlight下可以找到.

在MainPage.Xaml檔案拖入一個DataGrid控件來測試通路資料.布局如下:

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

         &lt;sdk:DataGrid AutoGenerateColumns="False" Height="212" HorizontalAlignment="Left" Margin="51,78,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="522"&gt;  

             &lt;sdk:DataGrid.Columns&gt;  

                 &lt;sdk:DataGridTextColumn Header="Code"  Binding="{Binding Code}"&gt;&lt;/sdk:DataGridTextColumn&gt;  

                 &lt;sdk:DataGridTextColumn Header="建立時間" Binding="{Binding CreateDate}"&gt;&lt;/sdk:DataGridTextColumn&gt;  

             &lt;/sdk:DataGrid.Columns&gt;  

         &lt;/sdk:DataGrid&gt;  

     &lt;/Grid&gt;  

後端代碼:

//添加引用  

 using HROAServicelibDate.Web;//注意引用時Ria Service 類庫中Web項目 而非TestCreateServiceLib.Web  

 using System.ServiceModel.DomainServices.Client;  

 namespace TestCreateServiceLib  

 {  

     public partial class MainPage : UserControl  

     {  

         //聲明  

         private HROAServicelibDate.Web.HROAModelDomainContext getcontent = new HROAModelDomainContext();  

         public MainPage()  

         {  

             InitializeComponent();  

             //獲得資料并綁定  

             LoadOperation&lt;HROAServicelibDate.Web.ProductOrder&gt; getproductlist = this.getcontent.Load(this.getcontent.GetProductOrderQuery());  

             this.dataGrid1.ItemsSource = getproductlist.Entities;  

         }  

     }  

 } 

這個如果重寫生成一下直接運作會提示一個GetProductOrderQuery()這個方法設計到對象GetProductORder Not Found找不到的異常:

<a href="http://blog.51cto.com/attachment/201201/100809585.png" target="_blank"></a>

這是因為通過承載Web運作Silverlight讀取Domain Service 資料庫連結資訊在TestCreateServiceLib.Web項目Web.Config中不存在. 所需要在HROAServicelibDate.Web項目App.Config檔案把實體對應和資料庫連結配置資訊拷貝到Web.Config中. 拷貝内容為.&lt;connectionStrings&gt;, &lt;system.serviceModel&gt;,和&lt;httpModules&gt;三個配置節點元素. 放到Web.Config.再次運作發現:

<a href="http://blog.51cto.com/attachment/201201/100816939.png" target="_blank"></a>

擷取資料成功.

本文轉自chenkaiunion 51CTO部落格,原文連結:http://blog.51cto.com/chenkai/765070