2010-01-28 48 views
5

我有一個WPF應用程序使用LINQ到SQL在本地.MDF文件。該解決方案是簡單,易行,有效,即設置我的模型一次,然後通過LINQ讀/寫數據的任何地方:什麼是Silverlight的LINQ到SQL的等價物?

 using (var db = Datasource.GetContext()) 
     { 
      oldItem = (from i in db.Infos 
         where i.Id == TheId 
         select i).SingleOrDefault(); 
      CreateForm(db, FormBase, oldItem, Button_Save); 
     } 

什麼是本作的Silverlight應用程序的死簡單等同?

搜索我找到術語的爆炸:

  • WCF RIA服務,WCF數據服務(ADO.NET數據服務,道夫),數據服務工具包
  • .NET RIA服務
  • 的OData (達拉斯)
  • 的GData
  • REST,基於REST,REST狀,REST啓發
  • XML,JSON,RDF + XML
  • Web服務,SOA
  • 基於雲的服務,天青,SQL Azure的,Azure服務平臺

所有我想做的事情是這樣的:

  • 創建密度纖維板文件
  • 使用一些類似LINQ-to-SQL的工具來生成支持Web的(REST?)數據層
  • 的ftp的.mdf文件和類到我ASP.NET Web託管服務
  • Silverlight客戶端讀取和寫入該數據源與LINQ
+0

+1對於RIA服務 – 2010-01-28 10:08:31

+0

+1好問題 – 2010-01-28 10:20:43

回答

4

精礦學習RIA數據服務或WCF數據服務。它將您在Silverlight內部的LINQ查詢轉換爲REST請求,並且避免您編寫一些基礎架構代碼。整個想法是,您的SL應用程序僅與Web服務通信,您無法訪問物理DB,例如當您使用某些ORM(L2S)時。在SL中,您位於瀏覽器的沙箱內,這會阻止您訪問文件系統,包括db文件。
其他方法是編寫Web服務並通過它公開數據(GetArticleByID),然後從Silverlight中使用該服務。然後你使用LINQ迭代獲取的加載數據。

+1

+1「RIA和WCF數據服務」,但是請求不一定是REST,但這不是開發人員需要擔心的東西。 – AnthonyWJones 2010-01-28 10:23:37

+0

提出最相關匹配的術語是「WCF RIA服務」,例如http://silverlight.net/getstarted/riaservices/ – 2010-01-28 10:37:30

+0

很難跟上這個框架的不斷重命名。很久以前,Astoria就是通過WCF Web服務對IQueryable數據進行REST風格的接口。最重要的是,他們最近爲Silverlight構建WCF RIA服務,以便通過LINQ查詢(WCF數據服務)快速輕鬆地使用Astoria。但是,RIA Services裏面有一些我真的不喜歡的概念,並且記得我在ASPX文件裏面的ASP.NET SqlDataSource控件,以及SQL查詢!將數據訪問邏輯保存在單獨的鬆散耦合層中,而不是UI聲明文件! – 2010-01-30 23:19:47

1

不可能。 Silverlight無法直接訪問數據庫。之間需要某種Web服務層。我認爲WCF和RIA服務是使用最廣泛的。

+0

正確的,我正在尋找將爲我生成這個Web服務層的東西,就像LINQ-to-SQL爲我生成數據模型類一樣,所以我不必考慮它,只是「通過linq使用它」 – 2010-01-28 10:13:49

+0

+1指出我想生成一個Web服務層,而不是數據模型類,改變了這一點。 – 2010-01-28 10:15:51

3

這裏是做什麼 -

  1. 使用Visual Studio創建一個Silverlight應用程序。您將獲得兩個項目,一個使用Silverlight XAML,另一個使用Web應用程序來託管它。

  2. 在Web應用程序中,添加您的DBML(Linq-2-SQL)文件。配置爲正常

  3. 在Web應用程序中添加一個Silverlight啓用WCF服務

  4. 在WCF服務,定義訪問L2S數據上下文

  5. 在Silverlight項目的一些方法,去添加服務引用,點擊「發現」,並在

  6. 添加WCF服務實例化的服務,並訪問你的方法

聽起來有點複雜,但在實踐中很簡單。

+1

+1這是我尋找的那種通過叢林的建議,會嘗試 – 2010-01-28 10:20:16

+0

讓我知道它是怎麼回事 - 很高興提供進一步的建議。我已經做了幾次這種Silverlight到linq的東西... – 2010-01-28 10:54:22

+0

第3步當我添加啓用silverlight的wcf服務到web應用程序,我得到「對象引用未設置爲實例對象「,雖然它似乎創建服務,有任何建議嗎? – 2010-01-28 14:26:12

1

我會強烈建議您明確一個小時在你的時間表,只是看這個視頻: -
net-ria-services-intro

事實上清晰2小時,工作沿着端的視頻建立自己的應用程序副本正在興建。

1

如果你想開發一個常規的L​​OB(業務線)應用程序,那麼你應該遵循使用Web服務接口到數據庫的方法。 RIA服務或WCF數據服務是Microsoft目前使用的RAD(快速應用程序開發)技術,可使此任務更輕鬆。

如果你正在談論一個特殊的場景,你需要:當瀏覽器用完時,Silverlight 4現在可以與Windows上的COM服務器通信。在這篇博文中描述了與數據庫的交流:Cutting Edge Silverlight 4 Com Features

如果您正在尋找操縱數據庫類文件的方法,那麼您可以查看csharp-sqlite項目。我認爲它編譯爲Silverlight 沒有太多的東西 (快速和骯髒的概念驗證這裏:Proof of Concept csharp-sqlite in Silverlight)。有了它,您可以在常規Silverlight應用程序的用戶隔離文件存儲中創建和操作數據庫文件,然後將其上傳到任何您想要的地方。

+0

+1在用戶的孤立存儲中運行sqlite數據庫的想法,巧妙的 – 2010-01-28 10:47:48

+0

這裏是一篇描述silverlight中sqlite的文章:http://www.itwriting.com/blog/1695-proof-of-concept-c-sqlite - 運行 - 在-silverlight.html – 2010-01-28 10:52:34