産品特色
編輯推薦
Entity Framework 是微軟 .NET 平颱支持的對象關聯映射技術,如今已發展得相當成熟,能夠輕鬆支持大型係統開發,開發人員可以通過實體數據模型對象與數據庫進行溝通,建立更堅固的商業應用程序係統,避免因為通過 ADO.NET
直接處理 SQL 語句伴隨的風險與可能産生的錯誤。
《Entity Framework 實用精要》帶領讀者進入 Entity Framework 的世界,建立必要的技術能力,同時希望讀者在完成書本的學習之後,能夠更進一步地將其運用在實際項目開發中。
內容簡介
Entity Framework 是微軟公司 .NET 平颱支持的對象關聯映射技術,開發人員可以通過實體數據模型對象與數據庫進行溝通,建立更堅固的商業應用程序係統,避免因為通過 ADO.NET 直接處理 SQL 語句而帶來的風險與可能引發的錯誤。本書通過介紹Entity Framework與 LINQ 開發實戰的案例,以 Entity Framework 技術內容的討論為主綫,結閤關鍵的 LINQ技巧說明,提供讀者係統性學習 Entity Framework 所需的內容。
《Entity Framework 實用精要》旨在幫助讀者進入 Entity Framework的世界,建立必要的技術能力,同時希望讀者在完成本書的教學課程之後,能夠更進一步地將其運用在實際的項目開發中。
作者簡介
呂高旭,颱灣康廷數字創始人, 專注程序語言與各種應用開發方法的教學,包括實體紙本圖書齣版與在綫課程服務。
目錄
第1章 Entity Framework概觀 1
1.1 初探Entity Framework 1
1.2 Entity Framework與ADO.NET 9
1.3 對象關聯映射——ORM 13
1.4 Entity Framework開發流程 14
1.5 空EF設計器模型 16
1.6 使用Code First 27
1.6.1 來自數據庫的Code First 27
1.6.2 空Code First模型 31
1.7 小結 34
第2章 實體數據模型 35
2.1 實體數據模型概觀 35
2.2 模型工具與.edmx文件 36
2.2.1 概念模型 39
2.2.2 存儲模型 42
2.2.3 映射 42
2.3 實體數據模型與類文件 44
2.4 POCO與實體數據模型 46
2.5 實體類結構映射 53
2.5.1 數據注解屬性 54
2.5.2 Fluent API 61
2.6 EF Designer數據庫更新 65
2.7 Code First數據庫遷移 71
2.7.1 結構變動遷移 76
2.7.2 查看SQL 78
2.7.3 指定遷移 79
2.8 關於DbContext 79
2.8.1 傳送SQL語句與數據轉換 80
2.8.2 查詢與連接議題 81
2.8.3 管理更新操作 82
2.8.4 DbContext對象生命期 83
2.8.5 覆寫OnModelCreating方法 83
2.8.6 管理與操作數據庫——Database屬性 83
2.8.7 ObjectContext 85
2.9 DbSet 87
2.10 追蹤本地數據集 91
2.11 小結 94
第3章 實體數據模型與LINQ 95
3.1 LINQ與Entity Framework 95
3.2 Select——選擇與投影 99
3.2.1 類型轉換 100
3.2.2 多重from與SelectMany 103
3.3 Where與數據篩選 107
3.4 排序 113
3.5 分組 116
3.6 轉換 122
3.6.1 AsEnumerable 122
3.6.2 Array與List 125
3.6.3 ToDictionary 128
3.6.4 ToLookup 131
3.7 異步查詢 134
3.8 關聯——Join 136
3.8.1 GroupJoin 139
3.8.2 Inner join與Left Outer Join 141
3.8.3 Entity Framework與Join 142
3.9 LINQ、SQL與Entity SQL 146
3.9.1 關於SQL語句 147
3.9.2 Entity SQL 147
3.9.3 Entity SQL參數 149
3.10 小結 150
第4章 Entity Framework與擴充方法 151
4.1 Enumerable擴充方法 151
4.2 聚閤運算 152
4.2.1 計算平均值 153
4.2.2 Average方法與Func 155
4.2.3 聚閤函數 158
4.3 設置操作 160
4.4 産生操作 164
4.4.1 Empty與DefaultIfEmpty 164
4.4.2 Range 166
4.4.3 Repeat 167
4.5 計數運算 169
4.5.1 All 169
4.5.2 Any 171
4.5.3 Contains 172
4.6 分割運算 173
4.6.1 Skip與SkipWhile 174
4.6.2 Take與TakeWhile 176
4.7 元素操作 178
4.7.1 First與FirstOrDefault 178
4.7.2 Last與LastOrDefault 180
4.7.3 ElementAt與ElementAtOrDefault 182
4.7.4 Single與SingleOrDefault 183
4.8 擴展方法的異步版本 185
4.9 小結 186
第5章 數據關聯與繼承 187
5.1 與關聯數據互動 187
5.2 Code Frist與關聯設計 194
5.2.1 Code First關聯設置慣例 196
5.2.2 數據注解 200
5.3 處理特定關聯定義 203
5.3.1 一對一(1 to 0..1) 203
5.3.2 多對多(* to *) 208
5.3.3 多對多關聯——附加數據字段 213
5.4 使用CodeFirst設計關聯 216
5.5 Lazy Loading與Eager Loading 223
5.5.1 調整virtual屬性 229
5.5.2 Include方法與對象加載 231
5.5.3 Include方法與異步數據加載 234
5.6 繼承 235
5.6.1 Table Per Hierarchy(TPH) 235
5.6.2 Table Per Type(TPT) 241
5.6.3 Table Per Concrete Class(TPC) 244
5.7 復雜類型 248
5.8 小結 251
第6章 數據編輯與維護 252
6.1 數據編輯操作 252
6.1.1 實體數據對象狀態 255
6.1.2 更新與刪除 256
6.1.3 Attach 259
6.1.4 變更追蹤——DbContext.ChangeTracker 263
6.1.5 更新驗證異常——DbEntityValidationException 268
6.1.6 DbContext.ValidateEntity方法 271
6.1.7 覆寫SaveChange 272
6.1.8 異步的變更更新 274
6.2 SQL語句 275
6.2.1 使用參數 279
6.2.2 執行非查詢變更指令——ExecuteSqlCommand 280
6.3 存儲過程 281
6.3.1 直接調用存儲過程 288
6.3.2 獲取返迴值 289
6.3.3 CodeFirst自動設置存儲過程 290
6.4 數據變更衝突 294
6.4.1 並發衝突處理——Database Wins或Client Wins 298
6.4.2 SQL語句與數據衝突 300
6.4.3 存儲過程與數據衝突 300
6.4.4 ConcurrencyCheck注解 302
6.5 事務處理 304
6.5.1 共享事務處理連接 305
6.5.2 使用TransactionScope 305
6.6 復雜類型的數據對象變更 308
6.7 小結 310
第7章 ASP.NET整閤應用 311
7.1 Web Forms與Entity Framework 311
7.1.1 查詢 314
7.1.2 更新 315
7.1.3 刪除 316
7.1.4 處理單項數據 316
7.1.5 關聯設計 319
7.2 MVC與Entity Framework 321
7.2.1 查詢 325
7.2.2 更新/刪除 326
7.2.3 添加 330
7.2.4 關係型數據 332
7.3 WCF服務與實體數據模型 335
7.3.1 WCF應用程序項目 335
7.3.2 數據閤約 339
7.3.3 整閤Entity Framework 340
7.4 小結 346
前言/序言
前 言
程序設計師編寫網頁商業應用程序時離不開對數據庫的運用,基本可以認為,不懂得運用數據庫的網頁應用程序設計師隻是完成瞭網頁美工設計師“委托的”工作。因為幾乎所有的商業化網頁用程序都要在後颱連接與訪問數據庫。
然而,沒有麵嚮對象的自動化工具,程序設計模型和數據庫集成在一起就會讓程序邏輯和數據模型雜亂無章地混閤在一起,不但開發大型網頁商業應用軟件無望,就連小型的網頁應用程序也沒有擴展的能力,將來維護起來更是可以用“一塌糊塗”來形容。
微軟公司在它的ADO.NET這個數據庫訪問利器的基礎上融入瞭對象關係映射(Object-Relational Mapping)的技術,再加上一個設計的工具(Designer),就構成瞭現在的 ADO.NET Entity Framework,就是以實體數據模型為主,通過Entity Framework Designer(EF設計器),利用抽象化數據結構的方式,將每個數據庫對象轉化為應用程序實體(或對象),讓數據庫的E/R模型(實體-關聯模型)也就轉換為對象模型。這樣,讓程序設計師能運用自己最熟悉的麵嚮對象的程序設計語言來輕鬆自如且安全可靠地調用和訪問數據庫,讓大型網頁商業應用軟件的開發也不是難事。
Entity Framework 是微軟 .NET 平颱支持的對象關聯映射技術,開發人員可以通過實體數據模型對象與數據庫進行溝通,建立更堅固的商業應用程序係統,避免因為通過 ADO.NET 直接處理 SQL 語句伴隨的風險與可能産生的錯誤。
從傳統的 ADO、ADO.NET 到現在的 Entity Framework,善用新技術讓我們在新時代走得更穩,本書主要的目標,除瞭帶領讀者進入 Entity Framework 的世界,建立必要的技術能力,同時希望讀者在完成書本的學習之後,能夠更進一步地將其運用在實際項目開發中。
本書為瞭方便讀者自學或者學校教學,所有的範例程序都是在微軟公司提供的免費版Visual Studio Community 2017中用C# 語言為主體編寫完成的,所有範例程序都經過瞭調試和測試,可以順利運行。
微軟的Visual Studio Community 2017可以從微軟公司的官方網站下載,網址如下:
https://www.visualstudio.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel;=15
本書的所有範例程序源碼及其運行必需的文件,讀者都可以從下麵的網址下載壓縮的文件包,之後解壓縮到自己的Visual Studio項目文件夾中即可。
這裏提供下載範例程序的網址:
http://pan.baidu.com/s/1cuEVUm(注意區分數字和英文字母大小寫)
如果下載有問題,請發送電子郵件至booksaga@126.com,郵件主題設置為“求Entity Framework實用精要下載資源”。
最後做一點說明:我們在編寫這些範例程序的時候,為瞭適用性,大多數範例程序都選擇連接的是Visual Studio Community 2017集成開發環境中自帶的虛擬數據庫(LocalDb)MSSQLLocalDB,因此範例程序對數據庫的操作都是對加載到內存中的這個虛擬數據庫進行增、刪、改等操作,範例程序運行時可以反映齣這種變化,但是不會實際修改範例程序運行時載入的實際數據庫文件。如果讀者要把範例程序拓展到對實際數據庫的操作,那麼在需要時按照實際應用建立本地或者網絡遠端的實際數據庫,並提供訪問的服務即可。
編者
2017年9月
《現代數據驅動應用開發:從容駕馭數據復雜性》 在這個數據爆炸的時代,構建高效、穩定且易於維護的數據驅動應用程序,是每一位軟件工程師麵臨的核心挑戰。無論是精美的 Web 應用、強大的後端服務,還是智能化的桌麵程序,其背後都離不開對數據的精妙處理。然而,隨著項目規模的增長和業務邏輯的復雜化,直接操作數據庫的傳統方式往往會暴露齣諸多問題:代碼冗餘、可維護性差、性能瓶頸頻現,甚至難以應對不斷變化的需求。 《現代數據驅動應用開發:從容駕馭數據復雜性》正是在這樣的背景下誕生的。這本書並非旨在介紹某一款特定的 ORM 工具,而是著眼於數據訪問層設計和實現的核心思想與實踐,幫助開發者構建齣更具健壯性、可擴展性和可維護性的數據驅動應用。我們相信,理解底層原理,掌握普適性的設計模式,纔能在瞬息萬變的開發環境中遊刃有餘。 本書的獨特視角與價值: 許多關於數據訪問的圖書往往會聚焦於某種特定技術的學習,例如某個 ORM 框架的 API 使用、SQL 語句的優化技巧,或是數據庫本身的管理。這些技術固然重要,但若缺乏對宏觀設計和底層原理的深入理解,開發者很容易陷入“隻見樹木,不見森林”的睏境。我們則采取瞭更加“以終為始”的策略,從最終目標——構建高質量的數據驅動應用——齣發,反推並梳理齣實現這一目標所必需的關鍵知識體係。 本書不糾結於某個特定框架的語法細節,而是深入探討: 數據模型的設計哲學: 如何根據業務需求,設計齣清晰、一緻且能夠有效映射現實世界對象的數據模型?我們將探討不同的建模方法,分析其優缺點,並提供實用的指導原則,幫助您避免常見的模型設計陷阱。這包括對實體、值對象、聚閤根等領域驅動設計(DDD)核心概念的深入剖析,以及如何將它們轉化為數據庫的錶結構。 數據訪問策略與模式: 除瞭簡單的 CRUD(創建、讀取、更新、刪除)操作,還有哪些更高級、更靈活的數據訪問模式能夠應對復雜的業務場景?本書將詳細介紹諸如倉儲模式(Repository Pattern)、單元 of Work 模式(Unit of Work Pattern)、CQRS(命令查詢職責分離)等經典設計模式,並結閤實際案例,演示如何運用它們來解耦數據訪問邏輯,提高代碼的可測試性和可維護性。 對象關係映射(ORM)的本質與權衡: ORM 工具極大地簡化瞭數據庫操作,但其內部機製和潛在的性能問題並非總被開發者充分理解。本書將深入淺齣地剖析 ORM 的工作原理,解釋其如何進行對象與數據庫錶之間的映射,以及它可能帶來的性能開銷(如 N+1 查詢問題、延遲加載的陷阱等)。在理解原理的基礎上,我們還將指導讀者如何根據具體場景,選擇閤適的 ORM 配置和使用方式,或者在必要時,如何繞過 ORM,直接編寫高效的 SQL 查詢,實現性能的最優化。 數據訪問層的架構設計: 如何組織和劃分數據訪問代碼,使其易於理解、擴展和復用?本書將提供關於如何構建清晰、模塊化數據訪問層架構的建議,包括如何分離數據訪問邏輯與業務邏輯,如何進行單元測試和集成測試,以及如何為未來的重構和技術升級做好準備。 並發控製與數據一緻性: 在多用戶、高並發的環境下,如何確保數據的一緻性和完整性是一個嚴峻的挑戰。本書將探討常見的並發控製技術,如悲觀鎖、樂觀鎖,以及事務管理的重要性。我們將分析不同場景下的數據一緻性需求,並提供相應的解決方案,幫助您構建齣能夠應對高並發挑戰的健壯係統。 性能優化與調優: 即使模型設計良好,代碼邏輯清晰,糟糕的數據庫交互也可能導緻應用性能低下。本書將提供一套係統的性能分析和優化方法,從數據庫查詢的執行計劃分析,到索引的閤理使用,再到緩存策略的運用,幫助您找到並解決性能瓶頸,提升應用的響應速度和用戶體驗。 數據遷移與版本控製: 隨著業務的發展,數據庫結構往往需要不斷演進。如何安全、高效地管理數據庫的變更,並確保數據在不同版本之間的一緻性?本書將介紹數據遷移的理念和常用工具,幫助您建立起一套可靠的數據庫版本控製和遷移流程。 本書適閤誰? 初級到中級軟件開發者: 希望係統性學習數據訪問層設計和實現,擺脫對某個特定 ORM 框架的“黑盒”依賴,構建更優質的數據驅動應用。 有經驗的軟件架構師: 尋求更深入地理解數據訪問的原理和最佳實踐,為團隊製定數據訪問層技術選型和架構規範。 需要提升應用性能和可維護性的團隊: 正在經曆數據庫性能瓶頸,或數據訪問代碼變得難以維護的團隊,需要一套行之有效的改進方案。 對底層原理有探究精神的開發者: 不滿足於錶麵 API 的調用,渴望理解 ORM 如何工作,數據庫是如何交互的,從而更精準地掌控開發過程。 本書的承諾: 我們承諾,《現代數據驅動應用開發:從容駕馭數據復雜性》將為您提供一套通用、實用且具有前瞻性的數據訪問開發指南。本書將以清晰的邏輯、豐富的案例和深入的解析,幫助您: 構建齣更加健壯和可維護的數據訪問層。 有效避免常見的性能陷阱,提升應用響應速度。 更從容地應對復雜業務場景下的數據處理需求。 培養獨立思考和解決數據訪問相關問題的能力。 為構建現代化、可擴展的軟件係統奠定堅實的基礎。 我們將帶領您一起,深入探尋數據驅動應用的本質,掌握駕馭數據復雜性的藝術。拋開對特定工具的片麵依賴,聚焦核心原則,讓您的數據驅動開發能力實現質的飛躍。