我應該使用Entity Framework,DataSet還是Custom類?

c# dataset entity-framework wcf

我在這裡真的很難過。我需要設計一個“桌面應用程序”,它將使用WCF作為通信渠道。它是一個多層應用程序(數據庫和應用程序服務器是相同的,客戶端通過互聯網雲)。

應用程序有點複雜(在SQL和代碼邏輯方面)然後是常見的LOB應用程序,但概念是相同的:從DB讀取,更新到DB,處理並發等等。我的問題是現在使用Entity Framework開放,我無法決定採用哪種方式:我應該使用實體框架,數據集還是自定義類。

正如我理解為Entity Framework,它將創建我的數據庫表ALONG與CRUD腳本的對象映射。這對於簡單的CRUD來說一切都很好,但是大多數時候“選擇”很複雜,它需要一個自定義SQL。我知道我可以在EF中使用存儲過程(我不喜歡SP btw,我不知道為什麼,我喜歡手動在DAL中編寫我的SQL代碼,我感覺更加安全和舒適)。

使用DataSet,我將使用自定義SQL並填充數據集。使用自定義類(數據庫表的對象),我將在自定義類(集合和列表等)上填充自定義SQL。我想使用EF,但我沒有信心部署一個我沒有編寫但在代碼中看不到的SQL的應用程序。我在這裡錯過了一些東西。

在這方面的任何幫助將不勝感激。

Xeshu

一般承認的答案

我同意Marc G. 100% - DataSets很糟糕,特別是在WCF場景中(它們為處理內存數據操作增加了很多開銷) - 不要使用它們。它們對初學者和小規模的雙層桌面應用程序都沒有好處 - 但我不會在一個嚴肅的專業應用程序中使用它們。

基本上,您的問題歸結為如何將數據庫中的行轉換為可以在WCF中遠程控制的內容。這意味著某種形式的映射 - 要么你自己做,使用DataReaders然後將所有數據推送到WCF [DataContract]類 - 你當然可以做到這一點,給你最終的控制,但它也是單調乏味,繁瑣和錯誤 -易於。

或者你讓一些現成的ORM為你處理這個笨拙的工作 - 選擇Linq-to-SQL(優秀,易用,靈活,但僅限SQL Server),EF v4(在2010年3月之前 - 看起來非常有前途,非常靈活)或任何其他ORM,真的 - 最適合您的需求。

ORM領域的其他重要競爭對手可能包括Subsonic 3.0和NHibernate(以及許多其他產品)。

總結一下:

  • 忘了數據集
  • 您是否擁有100%的控制權以及您自己的SQL與對象之間的映射
  • 你讓一些有能力的ORM處理(Linq-to-SQL,EF v4,Subsonic,NHibernate等) - 哪一個真的無關緊要,即它也是個人偏好和編碼風格的問題

專家解答

我不能提倡數據集,特別是在像WCF這樣的SOA環境中 - 它可以工作,但主要是出於錯誤的原因。它們根本不是便攜式的,IMO並沒有真正“服務”超過服務邊界。當然,IMO在大多數其他場景中也不起作用;-p

那麼它歸結為你想要做多少管道。大多數ORM將為您創建WCF可序列化類型;我個人現在使用LINQ-to-SQL;雖然EF 4.0在3.5sp1中要比EF好得多,但它比EF更簡單,更完整。您可以使用自定義TSQL(通過ExecuteQuery ,它仍然將映射返回到對象),但我傾向於使用SPROC(用於復雜查詢)或LINQ生成的查詢(用於簡單請求)。

自己編寫類型也很好,並且可以使用NHibernate等。這麼多選項。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因