Entity Framework 是微軟公司 .NET 平臺支持的對象關聯映射技術,開發人員可以通過實體數據模型對象與數據庫進行溝通,建立更堅固的商業應用程序系統,避免因為通過 ADO.NET 直接處理 SQL 語句而帶來的風險與可能引發的錯誤。本書通過介紹Entity Framework與 LINQ 開發實戰的案例,以 Entity Framework 技術內容的討論為主線,結合關鍵的 LINQ技巧說明,提供讀者系統性學習 Entity Framework 所需的內容。 本書旨在幫助讀者進入 Entity Framework的世界,建立必要的技術能力,同時希望讀者在完成本書的教學課程之后,能夠更進一步地將其運用在實際的項目開發中。
Entity Framework 是微軟 .NET 平臺支持的對象關聯映射技術,如今已發展得相當成熟,能夠輕松支持大型系統開發,開發人員可以通過實體數據模型對象與數據庫進行溝通,建立更堅固的商業應用程序系統,避免因為通過 ADO.NET
直接處理 SQL 語句伴隨的風險與可能產生的錯誤。
本書帶領讀者進入 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