簡體   English   中英

我應該使用數據集還是實體框架通過WCF服務傳輸數據?

[英]Should I use Datasets or Entity Framework to transfer data via WCF services?

我正在進行應用程序設計,並研究WCF服務和ASP.NET Web應用程序之間的數據傳遞。 我正在考慮的選項是使用“數據集”還是實體框架。

我有很多問題,

  1. 如果我使用Entity Framework傳遞數據,是否會增加WCF通信的開銷,
  2. 考慮到通信開銷,數據集是否被視為“輕量級”,
  3. 如果使用Entity Framework,如果使用存儲過程返回復雜數據,如何維護對象模型?

總的來說,我需要弄清楚使用這些技術的利弊。

您的問題涉及面向服務的體系結構(SOA)的原理。 在SOA中,服務應公開通過合同應用於業務對象的操作(方法)。 應該以標准方式定義業務對象,這就是WCF使用WSDL和XML Schema進行此操作的原因。

SOA的原則是,業務對象是通過架構和/或合同共享的,而不是通過特定的實現共享的。 按照這個原則,數據集是一個重量級,.NET特定的,面向數據庫的對象,不應用於表示業務對象。 Microsoft模式與實踐小組顯然無視SOA原則,因為它顯示了如何將數據集用作數據傳輸對象。 他們只是在促進供應商鎖定還是在破壞SOA的整個概念,這都是任何人的猜測。 如果非.NET客戶端使用您的服務的機會很小,請不要使用數據集。

如果您決定使用Entity Framework,那么我建議您使用Code First定義Entity Framework數據模型,並在服務中公開那些“ code first”業務對象。 這樣的SO問題與解答很好地討論了將實體框架與WCF一起使用的問題。

您是否真的考慮上下傳遞整個數據集? 盡管我認為您可以實現存儲庫模式,但是這將破壞您的對象模型並且更加難以維護。 盡管如此,即使只是發送更改,您也需要做一些奇怪的事情,例如確保您不傳輸架構,並可能使用compress選項。 但是,與實體框架代碼優先相比,這是一個非常糟糕的選擇,因為在單獨的程序集中具有漂亮干凈的POCO,並且沒有任何EF基礎架構污染DTO。

EF不應這樣增加開銷,但是它取決於實現方式和傳遞的數據對象。 如果傳遞的數據為背景,並使用時,正確的選項SaveChanges被稱為如SaveChangesOptions.ReplaceOnUpdate ,只有更改的實體將被更新。 只要您注意不要延遲加載不需要的內容,執行的查詢就會很有效。 您需要充分了解實體的LINQ,並像其他任何潛在的昂貴方法調用一樣批處理更新。 在運行數據庫探查器的情況下運行一些測試,並嘗試提高與EF交互的效率,監視IIS日志中的數據大小和傳輸時間等。

由於需要封裝模式,因此數據集不被認為是輕量級的,並且可能有人可能會犯錯並在多個表(包括依賴表)中發送整個數據堆。 無論如何,這些都可能需要在客戶端或服務器上拉入-非常混亂! EF確實以合理的方式支持存儲過程,因為它們可以成為模型的一部分,並在需要保存特定實體時被調用。 ORM將補充您的OO設計並生成更清晰的代碼。

同樣,如果您做的事情很簡單,只需要CRUD,而沒有太多的業務邏輯,請考慮使用WCF數據服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM