1. 程式人生 > >《你必須掌握的Entity Framework 6.x與Core 2.0》書籍出版

《你必須掌握的Entity Framework 6.x與Core 2.0》書籍出版

前言

到目前為止寫過剛好兩百來篇部落格,看過我部落格的讀者應該大概知道我每一篇部落格都沿襲著一貫的套路,從前言到話題最終到總結,本文依然是一如既往的套路,但是不是介紹技術,也可說是介紹技術,不過是介紹書中的技術以及我對寫作的態度,作為對本書的宣傳,本書在最近即將出版,到時會在部落格公告欄中放出購買連結。

寫作初衷

之前有過出版社的編輯找我寫書,我當時看了看也沒回復最終當然也就是不了了之了,最主要的是覺得自己資歷尚淺,寫書和寫部落格有很大不同,寫部落格在言語上可以略微隨意,而寫書需要的是嚴謹同時在表達上也應言簡意賅,後來怎麼又寫上了呢,看了看自己寫的部落格當屬EF最多,記得在我初次學習EF時,我還特意搜尋了下有沒有相關中文的書籍作為參考資料,然而幾乎一本都沒有,後來我只能看看園中前輩們的部落格和老外的文章來學習,最終也就寫了一部分不算完整的EF系列,這個時候我想到是不是可以寫一本EF 6.x和EF Core 2.0的書籍呢?作為EF 6.x和EF Core 2.0系統性學習的參考資料,若能幫助到初學和想繼續深入的同行將再好不過了,也算是我對.NET作出的一份努力,同時也希望通過本書讓您重新拾起對EF和EF Core的正確認知。

寫作態度

從選題材到寫完書大概耗時半年多的時間,在寫EF篇章時腳步稍微快些,因為之前寫過,只是在其過程中EF更新了一點點內容就花了一點時間去看文件,所以相對來說比較熟練一點,到了EF Core篇章腳步放緩了很多,雖然我也有寫過,但是還不夠深入,所以相當於寫本書我從頭又學習了EF和EF Core並深入探索到一些不為人知的祕密。寫完後不久就開始了審稿,接著編輯那邊將問題統一歸納交由我修改,同時我也秉著對自己負責和對讀者負責的態度認真去修正文件中的錯誤,絲毫不敢懈怠,修改了有問題的地方以及添加了部分內容,都是在凌晨發給了編輯(【捂臉】),在這裡要對編輯說聲抱歉。以下是我從寫作開始到書正式出版的詳細記錄。

640?wx_fmt=png

你必須掌握的Entity Framework 6.x和Core 2.0

書籍名稱如部落格標題所言,您也可將本書看做是您所不知道的Entity Framework 6.x和 Core 2.0,比如您是否知道EF 6.0如何建立索引呢?比如您又是否知道在EF 6.x中如何正確更新資料呢?比如您又是否知道在EF Core中何種情況下即通過lambda表示式使用Include來進行飢餓載入不好使呢?比如您又是否知道在EF Core中通過Find或者FindAsync方法如何進行飢餓載入呢?比如您又是否知道EF Core上下文例項池本質是什麼呢?這樣的疑問還有太多太多,本書如管中窺豹,帶您一探究竟。本書既面向基礎學習者也面向進階學習者,無論您是自學還是在專案中用到了EF 6.x抑或是EF Core 2.0,本書將對您或許有一定幫助。

推薦致謝

只見過張善友大哥,與其他幾位大佬素未謀面,不知是否能夠得到大佬們的認可,懷著忐忑的心情去找大佬們寫推薦,結果大佬們很快寫完就交給我了,在此表示感謝,感謝dudu老大、何鎮汐大哥,張善友大哥,趙培(好基友),鄒瓊俊大哥,感謝大佬們在百忙之中抽空為本書做推薦,感謝大佬們對本書的認可和支援。這裡額外打個小廣告:何鎮汐大哥現作為.NET Core中國專案成員之一,以一己之力開發.NET Core平臺下的應用框架(https://github.com/dotnetcore/Util),感謝何鎮汐大哥對.NET Core所作出的貢獻,同時也期待有志之士能夠參與進來。

寫作目錄

第一篇 1
第 1 章 7
EntityFramework歷史 7
1.1 EntityFramework版本介紹 7
1.2 EntityFramework 領域建模方式 9
1.2.1 Code First 9
1.2.2 Model First 10
1.2.3 Database First 10
1.3 使用EntityFramework Code First 6.x 或Core 2.0的原因 10
1.4 小結 11
第 2 章 12
資料庫表建立和遷移 12
2.1 資料庫連線和初始化策略 12
2.1.1 資料庫連線 12
2.1.2 資料庫初始化策略 15
2.2 約定 17
2.2.1 型別發現 17
2.2.2 主鍵約定 17
2.2.3 關係約定 19
2.2.4 複雜型別約定 20
2.2.5 自定義約定 21
2.3 基於程式碼配置(Code-based Configuration Settings) 29
2.4 配置屬性對映和關係對映 32
2.4.1 屬性對映 32
2.4.2 關係對映 50
2.4.3 私有化屬性對映 67
2.5 繼承對映策略 69
2.5.1 Table per Hierarchy (TPH) 70
2.5.2 Table per Type (TPT) 70
2.5.3 Table per Concrete class (TPC) 73
2.5.4 Entity Splitting 77
2.5.5 Table Splitting 80
2.6 程式碼遷移 82
2.6.1 遷移命令 82
2.6.2 遷移本質 91
第 3 章 102
實體狀態和資料操作 102
3.1 實體狀態 102
3.2 資料操作 105
3.2.1 資料查詢 105
3.2.2 資料儲存 124
3.2.3 自動生成儲存過程 135
3.3 避免陷阱
3.3.1 導航屬性查詢
3.3.2 分頁查詢 
3.3.3 語義可空
3.3.4 表值函式
3.3.5 日期操作
3.4 基礎篇實戰 138
3.4.1 複雜屬性作為JSON儲存資料庫表列 138
第二篇 153
第 4 章 155
上下文管理和變更追蹤原理 155
4.1 上下文生命週期管理 155
4.1.1 基礎模式追溯 155
4.1.2 生命週期追溯 157
4.1.3 進化模式追溯 160
4.2 變更追蹤原理 163
4.2.1 快照式變更追蹤(Snapshot based Change Tracking) 163
4.2.2 代理式變更追蹤(Notification based Change Tracking with Proxies) 165
第 5 章 175
變更追蹤原理和日誌管理 175
5.1 DetectChanges原理 175
5.1.1 DetectChanges用途 175
5.1.2 呼叫DetectChanges方法時機 177
5.1.3 關閉自動呼叫DetectChanges方法 180
5.1.4 遺忘的二進位制屬性和複雜型別 182
5.2 日誌記錄 186
5.2.1 ToString列印 186
5.2.2 簡單日誌列印 187
5.2.3 結構化日誌輸出 190
5.2.4 構造塊攔截 192
5.2.5 攔截器異常效能監控 197
5.2.6 攔截器解決EF 6.1忽略字串空格歷史遺留問題 211
5.3 事務 215
5.4 連線彈性 240
第 6 章 246
併發衝突 246
6.1 初級版解析 246
6.2 中級版解析 252
6.2.1 客戶端獲勝 253
6.2.2 資料庫獲勝 254
6.2.3 客戶端和資料庫合併獲勝 255
6.3 高階版解析 256
6.3.1簡單重試策略 257
6.3.2 Polly重試策略 257
第 7 章 262
效能優化實踐 262
7.1 優化一:預編譯檢視 262
7.2 優化二:減少首次與資料庫互動程式碼 266
7.3 優化三:NGen安裝EntityFramework程式集 269
7.4 優化四:AsNoTracking 271
7.5 優化五:DbFunctions/SqlFunctions 271
7.6 優化六:快取 276
7.7 優化七:重新編譯查詢 282
7.8 優化八:避免’N+1’ Select查詢 287
7.9 優化九:新增索引 289
7.10 優化十:關閉回撥DetectChanges方法 293
7.11 優化十一:使用非同步查詢 296
第 8 章 297
EntityFramework 6.x實戰 297
8.1 工作單元泛型倉儲模式(Generic Repository and a Unit of Work) 297
8.2 依賴注入泛型倉儲模式(Generic Repository Pattern and Dependency Injection) 321
第三篇 338
第 9 章 340
資料庫表建立和遷移 340
9.1 資料庫初始化策略 340
9.2 配置屬性對映和關係對映 344
9.2.1 屬性對映 345
9.2.2 Backing Fields 357
9.2.3 Alternate Keys 362
9.2.4. Shadow Property 363
9.2.5 Owned Entities 368
9.2.6 HasQueryFilter 369
9.2.7 關係對映 371
9.2.8 繼承對映 393
9.3 程式碼遷移 398
9.3.1 控制檯程式遷移 398
9.3.2 Web應用程式遷移 400
9.3.3 多個上下文遷移 413
9.3.4 腳手架逆向遷移 417
第 10 章 422
資料操作和初始化資料 422
10.1 實體狀態 422
10.2 資料操作 423
10.2.1 資料查詢 423
10.2.2 資料儲存 446
10.3 無連線實體 452
10.4 初始化資料 455
第四篇 459
第 11 章 461
效能優化實踐 461
11.1 AsNoTracking 461
11.2 EF.Functions.Like 463
11.3 自定義標量函式 466
11.4 顯式編譯查詢 470
11.5 上下文例項池 473
第 12 章 479
查詢實體元資料和模型資料驗證 479
12.1 查詢元資料 479
12.2 內建模型驗證 481
12.3 第三方擴充套件模型驗證 484
第 13 章 488
上下文例項建立方式 488
13.1 顯式建立上下文例項 488
13.1.1 帶有建構函式的OnConfiguring方法 488
13.1.2 傳遞連線字串引數到建構函式 489
13.1.3 使用不帶依賴注入的DbContextOptions 489
13.2 依賴注入容器建立上下文例項 490
13.2.1 帶有無參建構函式的DI 490
13.2.2 帶DbContextOptions的DI 491
13.3.3 使用泛型DbContextOptions 491
13.3.4 使用AddDbContext/AddDbContextPool 492
第 14 章 494
實現多租戶 494
第 15 章 504
捕獲審計資料 504
第 16 章 510
變更追蹤策略和日誌管理 510
16.1 變更追蹤策略 510
16.1.1 INotifyPropertyChanged 511
16.1.2 INotifyPropertyChanging 514
16.2 日誌管理 516
16.2.1 新增控制檯包輸出 516
16.2.2 自定義日誌輸出 517
第 17 章 521
xUnit單元測試 521
17.1 控制檯單元測試 522
17.2 NET Core Web應用程式單元測試 524
第 18 章 527
事務和併發衝突 527
18.1 事務 527
18.2 併發衝突 533
18.2.1 初級版解析 534
18.2.2 中級版解析 538
18.2.3 高階版解析 543
第 19 章 550
EntityFramework Core 2.1待發布 550
19.1 新特性實現目標 550

總結 

本書是我所理解的EF 6.x和EF Core 2.0,也有我個人的一些思考,若本書能夠對您有所幫助,那麼如我寫部落格一樣成就感就在於此了,期待本書能夠得到您的認可,我會一如既往和大家分享我所得。

原文地址: https://www.cnblogs.com/CreateMyself/p/8655069.html

.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com

640?wx_fmt=jpeg