2011-11-29 87 views
0

好吧,我有這個Silverlight客戶端程序。 我不允許使用網絡項目,但我確實需要能夠從SQL數據庫中讀取我的數據。Silverlight客戶端中的LINQ to SQL

一些互聯網搜索將我帶到LINQ to SQL和System.Data.Linq.DataContext對象以及SQLMetal.exe。我從遠程SQL數據庫中的元數據創建了我的數據上下文對象,並且代碼看起來沒問題(從我能說的 - 所有正確的名稱和類型似乎都在那裏)。

我想要做的就是將其添加到Silverlight中,但是我意識到,在導入代碼時,您無法在Silverlight應用程序中使用System.Data,在Silverlight客戶端中擁有此代碼的哪種排除規則本身。現在這是令人討厭的,因爲DataContext很方便地附帶有表格等屬性(我發現在Silverlight中非常方便)。

所以我不能這樣做'正常的方式'。我可以使用WCF服務來做到這一點,但是......好吧,我可以在這裏使用一些建議。我可以用異步調用創建一個WCF服務,但我不確定用什麼方式連接DataContext對象。我的意思是...我需要訪問我的Silverlight應用程序中的類(對於數據庫中的實體)(我不太清楚如何做到這一點 - 在此幫助將不勝感激)。然後把它全部同步?那麼,我可以使用一些建議。例如,之前,我有一個公開的ObservableCollection。在它的獲取者中,它重新編制了自己的內容,例如Context.Customers。這使事情變得簡單易懂,但我現在看不到一種這樣的方式。如果我爲每一個'get'打電話給一個異步服務,肯定這將是無法接受的緩慢。

如果你能幫我挑選我的方式,我將不勝感激。謝謝。

+0

您需要[RIA服務](http://www.silverlight.net/learn/advanced-techniques/wcf-ria-services/get-started-with-wcf-ria-services)。 – ChrisF

回答

1

您肯定需要閱讀關於在Silverlight應用程序中使用WCF RIA + EF的Entity Framewrokcouple articles

希望,那會幫助你。

+0

這是.edmx的東西吧?我之前做過這個,但是我可以使用web項目部分。我不知道你可以將其中的一個添加到客戶端應用程序中。 – user738383

0

如上所述,您可以使用RIA服務。

但更重要的是,您不應該使用在客戶端應用程序中LINQ to SQL或EF中生成的類。您的客戶端應用程序應該只知道並使用域層對象。您的datacontext及其使用的類型應該隱藏在一個存儲庫模式後面,可以讓您備份域類型。

您的客戶端,無論可能是什麼(Silverlight應用程序,WPF應用程序等)只需要(而且應該只)使用這些域類型。這是整個關注點和SOLID原則分離的一部分。因爲我可以在應用程序的生命週期中的某個時候保證你,所以你會換出你的數據源,所以你最終可能會使用實體框架,或NHibernate與db進行對話,在這種情況下,連接到您的LINQtoSQL類型,並且您將無法在不中斷客戶端的情況下更換ORM層。

+0

值得一提的是,我目前在一個複雜的Silverlight應用程序中使用了30K + LOC,並且我還沒有發現在EF生成的類上疊加額外的一組類的任何價值。我理解這個理論 - 只是說,至少有時候,在實踐中,這是沒有必要的。 –