具有儲存過程的數據集與實體框架
整個問題已被重寫以更清楚..
新項目設計:
- 數據庫伺服器 2012
- 視覺工作室 2012 .Net 4.5
- 業務邏輯將在儲存過程中實現
- ASP.Net 網路表單
- WCF SOAP XML Web 服務使用 DBA 提供的儲存過程與數據庫進行通信
- 實體框架或數據集
在這裡我可以使用 Dataset - 沒問題,但我想在更詳細的解釋中了解 Entity Framework 相對於 Dataset 的優勢。我一直在閱讀有關實體框架的文章,並且由於以下原因,我看到人們在數據集上使用 EF 的體驗更好。
我想知道這些是否仍然是在我的案例中使用 EF 可以獲得的優勢 - 與數據庫相關的操作總是通過儲存過程完成:
- EF 更乾淨,更容易維護和程式。針對 EF ObjectContext 的查詢始終針對數據庫執行
- 因為您的對象和數據庫之間的映射是通過聲明而不是在程式碼中指定的,所以如果您需要更改數據庫模式,您可以最大限度地減少對您必須在應用程序中修改的程式碼的影響——因此系統提供了一個級別抽像有助於將應用程序與數據庫隔離。因此,EF 可以替換您必須自己編寫和維護的大量程式碼。(如果儲存過程設計已更改怎麼辦?)
- EF 專門用於將映射查詢/塑造結果的過程與建構對象和跟踪更改分開。
- 數據集很糟糕,尤其是在 WCF 場景中(它們為處理記憶體中的數據操作增加了很多成本)-> 意味著帶有 WCF 的 EF 性能更好?
1. EF 更乾淨,更容易維護和程式 ->> 你能詳細說明一下嗎?.. 這是因為下面的 #2 嗎?
EF 是一個對象關係映射器 (ORM),它將自動生成與您的數據庫模式相關的對象,如 #2 中所述。EF 是數據訪問層的開箱即用抽象,在目前版本中實現了儲存庫模式。這為您帶來了一些好處,例如 LINQ、對像圖 CRUD 操作以及 EF 團隊認為通過 .NET 訪問數據的最佳實踐。
開箱即用的功能和與數據庫(特別是 SQL Server)的輕鬆集成可以提供更容易維護和程式。但是,在某些情況下,使用 ORM 可能不是最佳選擇,您應該謹慎判斷。以下是一些不使用 ORM 的情況(尤其是當您的團隊缺乏目前的 EF 知識時):有限的數據查詢、不復雜的應用程序、舒適的編寫或使用數據訪問層、您的應用程序截止日期很緊迫等。請參閱我在下面提到的其他選項。
2. 如果你需要改變你的數據庫模式,你可以盡量減少對你在應用程序中修改的程式碼的影響->> 如果儲存過程的參數和返回欄位改變了怎麼辦?EF還是把影響降到最低?
是的,EF 根據 EDMX 文件生成,該文件只是數據庫模式的 XML 文件。這包括更新映射到您的儲存過程的對象(注意:如果在 EF6 發布之前先使用程式碼,這不適用)。您可以更改儲存過程,EF 可以採用更新後的架構並更新您的程式碼。但是,您將不得不修復呼叫 EF 儲存過程方法並且參數已更改的程式碼。如果您對 EF 感到不舒服,您也可以使用 LINQ to SQL,它將提供儲存過程呼叫作為對象方法。
3. 數據集很糟糕,尤其是在 WCF 場景中(它們為處理記憶體中的數據操作增加了很多成本)->> 你能解釋更多嗎?
“DataSets 很爛”顯然是一個通用的說法。您將 DataSet 用於它們的用途,即使用 .NET 處理記憶體中的數據。由於 DataSet 在記憶體中,因此在執行簡單的 CRUD 操作時它們被認為是低效的。建議使用儲存過程和數據讀取器(完成讀取數據後務必關閉它們),以便使用 SQL 數據庫進行高效的數據讀取。
除了 EF,還有其他選擇:
- 自己動手——編寫儲存過程、使用數據讀取器並映射到 POCO 對象
- 使用動態庫 - Dapper、ServiceStack ORM Lite、Simple POCO、Simple Data、Massive
- 使用 LINQ to SQL - 輕量級數據訪問層(僅適用於 SQL Server)
- 其他 ORM - NHibernate 是首選。