C# 12 和.NET 8 入門與跨平臺開發, 8/e C# 12 and .NET 8 - Modern Cross-Platform Development Fundamentals - Eighth Edition: Start building websites and services with ASP.NET Core 8, Blazor, and EF Core 8, 8/e

[美] 馬克·J.普萊斯(Mark J. Price)著 葉偉民 譯

  • C# 12 和.NET 8 入門與跨平臺開發, 8/e-preview-1
  • C# 12 和.NET 8 入門與跨平臺開發, 8/e-preview-2
  • C# 12 和.NET 8 入門與跨平臺開發, 8/e-preview-3
C# 12 和.NET 8 入門與跨平臺開發, 8/e-preview-1

買這商品的人也買了...

商品描述

"C#的應用領域極廣,是編程語言中的翹楚。作為暢銷的C#系列圖書的**版本,本書涵蓋C#12和.NET 8的所有**功能,將幫助你夯實基礎,讓你自信地使用**C#和.NET構建項目。 《C# 12和.NET 8入門與跨平臺開發(第8版)》討論面向對象編程、編寫函數、測試函數調試函數及實現接口等主題;介紹.NETAPI,這些API可執行多種任務,如管理和查詢數據,使用文件系統、序列化。你可用ASP.NET Core來構建和部署本書列舉的跨平臺示例應用程序,如網站和服務 《C# 12和.NET 8入門與跨平臺開發(第8版)》示例中融入了.NET 8的增強功能,使用類型別名和主構造函數來實現簡潔的、表達力強的代碼。你將使用新增的、內置的保護子句來可靠地處理錯誤,並探索ASP.NET Core 8中簡化的緩存實現。 你還將看到,在發布過程中使用原生的AOT編譯能夠縮短啟動時間和減少內存占用。你還將使用Visua Studio 2022中新增的HTTP編輯器來完善測試和調試過程。本書甚至介紹了Blazor全棧,它提供的統一托管模型能夠實現無可比擬的Web開發靈活性。 主要內容: ?C# 12的新功能,包括類型別名和主構造函數 ?ASP.NET Core 8最小APIWeb服務的原生AOT發布功能 ?通過Blazor全棧、Razor Pages等ASP.NET Core技術構建沉浸式Web應用 ?使用Entity Framework Core模型來無縫地集成和更新數據庫 ?使用LINO來查詢和操縱數據 ?使用Web API和最小API構建和使用功能強大的服務"

作者簡介

葉偉民,廣州.NET技術俱樂部主席、中國香港Azure/.NET技術俱樂部創始人兼主席、.NET社區聯盟建設者,在.NET編程領域有15年工作經驗。

目錄大綱

目    錄

 

第1章  C#與.NET入門  1

1.1 本書內容簡介  1

1.1.1 獲取本書的代碼解決方案  1

1.1.2 本書使用的.NET術語  2

1.1.3 本書的結構和風格  2

1.1.4 本書討論的主題  3

1.1.5 Apps and Services with .NET 8一書中涵蓋的主題  3

1.2  設置開發環境  3

1.2.1 選擇適合學習的工具和應用程序類型  4

1.2.2 跨平臺部署  7

1.2.3 下載並安裝Visual Studio 2022  7

1.2.4 下載並安裝Visual Studio Code  8

1.3  理解.NET  10

1.3.1 瞭解.NET支持  11

1.3.2 理解中間語言  13

1.3.3 比較.NET技術  14

1.3.4 使用代碼編輯器管理多個項目  14

1.4  使用Visual Studio 2022構建控制台應用程序  14

1.4.1 使用Visual Studio 2022編寫代碼  14

1.4.2 使用Visual Studio編譯和運行代碼  17

1.4.3 理解頂級程序  18

1.4.4 揭示Program類的名稱空間  20

1.4.5 使用Visual Studio 2022添加第二個項目  20

1.5  使用Visual Studio Code構建控制台應用程序  23

1.5.1 使用Visual Studio Code編寫代碼  23

1.5.2 使用dotnet CLI編譯和運行代碼  25

1.5.3 使用Visual Studio Code添加第二個項目  26

1.5.4 Visual Studio Code的步驟小結  28

1.5.5 本書中使用的其他項目類型小結  28

1.6  充分利用本書的GitHub存儲庫  28

1.6.1 瞭解GitHub上的解決方案代碼  29

1.6.2 對本書提出問題  29

1.6.3 反饋  30

1.6.4 避免常見錯誤  30

1.6.5 從GitHub存儲庫下載解決方案代碼  30

1.6.6 在Visual Studio Code和命令行中使用Git  31

1.7  尋求幫助  31

1.7.1 閱讀Microsoft Learn中的文檔  31

1.7.2 本書中的文檔鏈接  31

1.7.3 獲取關於dotnet工具的幫助  32

1.7.4 獲取類型及其成員的定義  33

1.7.5 配置內聯提示  36

1.7.6 在Stack Overflow上尋找答案  36

1.7.7 使用谷歌搜索答案  37

1.7.8 搜索.NET源代碼  37

1.7.9 訂閱官方的.NET博客  38

1.7.10 觀看Scott Hanselman的視頻  38

1.7.11 ChatGPT和GitHub Copilot等AI工具  39

1.7.12 當工具成為障礙時禁用工具  41

1.8  實踐和探索  41

1.8.1 練習1.1:測試你掌握的知識  41

1.8.2 練習1.2:使用瀏覽器在任何地方練習C#  42

1.8.3 練習1.3:探索主題  42

1.8.4 練習1.4:探索Polygot Notebooks  42

1.8.5 練習1.5:探索現代.NET的主題  42

1.8.6 練習1.6:Free Code Camp和C#認證  43

1.8.7 練習1.7:.NET的alpha版本  43

1.9  本章小結  43

第2章  C#編程基礎  45

2.1  介紹C#語言  45

2.1.1  理解C#語言版本和特性  45

2.1.2  瞭解C#標準  46

2.2  瞭解C#編譯器版本  46

2.2.1 如何輸出SDK版本  47

2.2.2 啟用特定的語言版本編譯器  47

2.2.3 使用未來的C#編譯器版本  48

2.2.4 .NET 8的C#編譯器切換到後續版本  48

2.2.5  顯示編譯器版本  49

2.3  理解C#語法和詞匯  50

2.3.1  瞭解C#語法  50

2.3.2  語句  51

2.3.3  註釋  51

2.3.4  代碼塊  52

2.3.5  區域  52

2.3.6  語句和語句塊的示例  53

2.3.7  使用空白字符格式化代碼  54

2.3.8  瞭解C#詞匯表  54

2.3.9  將編程語言與人類語言進行比較  55

2.3.10  修改C#語法的配色方案  55

2.3.11  如何編寫正確的代碼  55

2.3.12  導入名稱空間  56

2.3.13 隱式和全局導入名稱空間  56

2.3.14  動詞表示方法  60

2.3.15  名詞表示類型、變量、字段和屬性  60

2.3.16  揭示C#詞匯表的範圍  61

2.3.17  請求ChatGPT解釋代碼的示例  62

2.4  使用變量  64

2.4.1  命名和賦值  64

2.4.2  字面值  65

2.4.3  存儲文本  65

2.4.4  輸出表情符號  66

2.4.5 理解逐字字符串  66

2.4.6 原始字符串字面值  66

2.4.7 原始內插字符串字面值  67

2.4.8 有關存儲文本的總結  67

2.4.9  存儲數字  68

2.4.10 探索整數  69

2.4.11 存儲實數  69

2.4.12  新的數字類型和不安全代碼  72

2.4.13  存儲布爾值  73

2.4.14  存儲任何類型的對象  74

2.4.15 動態存儲類型  74

2.4.16  聲明局部變量  76

2.4.17  獲取和設置類型的默認值  78

2.5  深入研究控制台應用程序  79

2.5.1  向用戶顯示輸出  79

2.5.2  從用戶那裡獲取文本輸入  83

2.5.3  簡化控制台的使用  84

2.5.4  獲取用戶的重要輸入  85

2.5.5  向控制台應用程序傳遞參數  86

2.5.6  使用參數設置選項  89

2.5.7  處理不支持API的平臺  90

2.6  理解async和await  92

2.7  實踐和探索  93

2.7.1  練習2.1:測試你掌握的知識  93

2.7.2  練習2.2:測試你對數字類型的瞭解  93

2.7.3  練習2.3:練習數字大小和範圍  94

2.7.4  練習2.4:探索主題  94

2.7.5  練習2.5:探索Spectre庫  94

2.8  本章小結  94

第3章  控製程序流程、轉換類型和處理異常  95

3.1  操作變量  95

3.1.1  理解二元運算符  95

3.1.2  理解一元運算符  96

3.1.3  理解三元運算符  96

3.1.4 二元算術運算符  98

3.1.5  賦值運算符  98

3.1.6 空值合並運算符  99

3.1.7 邏輯運算符  99

3.1.8 條件邏輯運算符  100

3.1.9 按位和二元移位運算符  101

3.1.10  其他運算符  102

3.2  理解選擇語句  103

3.2.1  使用if語句進行分支  103

3.2.2  模式匹配與if語句  104

3.2.3  使用switch語句進行分支  105

3.2.4  使用Visual Studio 2022向項目添加新項  106

3.2.5 模式匹配與switch語句  107

3.2.6  使用switch表達式簡化switch語句  109

3.3  理解迭代語句  110

3.3.1  while循環語句  110

3.3.2  do循環語句  111

3.3.3  for循環語句  111

3.3.4  foreach循環語句  112

3.4  在數組中存儲多個值  113

3.5  類型轉換  119

3.5.1  隱式和顯式地轉換數字  120

3.5.2 負數在二進制中的表示  121

3.5.3 使用System.Convert類型進行轉換  122

3.5.4  圓整數字和默認的圓整原則  123

3.5.5  控制圓整規則  124

3.5.6  從任何類型轉換為字符串  124

3.5.7  從二進制對象轉換為字符串  125

3.5.8  將字符串轉換為數字或日期和時間  126

3.6  處理異常  128

3.7  檢查溢出  132

3.7.1  使用checked語句拋出溢出異常  132

3.7.2  使用unchecked語句禁用編譯時溢出檢查  133

3.8  實踐和探索  134

3.8.1  練習3.1:測試你掌握的知識  134

3.8.2  練習3.2:探索循環和溢出  135

3.8.3  練習3.3:測試你對運算符的掌握程度  135

3.8.4 練習3.4:實踐循環和運算符  135

3.8.5 練習3.5:實踐異常處理  136

3.8.6  練習3.6:探索C# Polyglot Notebooks  136

3.8.7  練習3.7:探索主題  136

3.9  本章小結  137

第4章  編寫、調試和測試函數  138

4.1  編寫函數  138

4.1.1  理解頂級程序、函數和名稱空間  138

4.1.2 對於局部函數,編譯器會自動生成什麽  139

4.1.3  使用靜態函數定義分部程序  140

4.1.4 對於靜態函數,編譯器會自動生成什麽  141

4.1.5  乘法表示例  142

4.1.6  簡述實參與形參  144

4.1.7  編寫帶返回值的函數  145

4.1.8  將數字從基數轉換為序數  147

4.1.9  用遞歸計算階乘  149

4.1.10  使用XML註釋文檔化函數  151

4.1.11  在函數實現中使用lambda  152

4.2  在開發過程中進行調試  154

4.2.1 創建帶有故意錯誤的代碼  154

4.2.2  設置斷點並開始調試  155

4.2.3  使用調試工具欄進行導航  157

4.2.4  調試窗口  158

4.2.5  單步執行代碼  158

4.2.6  在 Visual Studio Code 中使用集成終端進行調試  159

4.2.7 自定義斷點  161

4.3  在開發期間進行熱重載  163

4.3.1  使用Visual Studio 2022進行熱重載  163

4.3.2  使用Visual Studio Code和dotnet watch命令進行熱重載  164

4.4  在開發和運行時進行日誌記錄  165

4.4.1  理解日誌記錄選項  165

4.4.2  使用Debug和Trace類型  165

4.4.3  配置跟蹤偵聽器  167

4.4.4  切換跟蹤級別  168

4.4.5  記錄有關源代碼的信息  174

4.5  單元測試  175

4.5.1  理解測試類型  176

4.5.2  創建需要測試的類庫  176

4.5.3  編寫單元測試  177

4.6  在函數中拋出並捕獲異常  180

4.6.1  理解使用錯誤和執行錯誤  180

4.6.2  在函數中通常拋出異常  180

4.6.3 使用保護子句拋出異常  181

4.6.4 理解調用堆棧  181

4.6.5  在哪裡捕獲異常  184

4.6.6  重新拋出異常  184

4.6.7  實現tester-doer模式和try模式  186

4.7  實踐和探索  187

4.7.1  練習4.1:測試你掌握的知識  187

4.7.2  練習4.2:編寫帶有調試和單元測試功能的函數  187

4.7.3  練習4.3:探索主題  188

4.8  本章小結  188

第5章  使用面向對象編程技術構建自己的類型  189

5.1  面向對象編程  189

5.2  構建類庫  190

5.2.1  創建類庫  190

5.2.2  理解文件作用域名稱空間  192

5.2.3 在名稱空間中定義類  192

5.2.4 理解類型訪問修飾符  193

5.2.5  理解成員  193

5.2.6  導入名稱空間以使用類型  194

5.2.7  實例化類  196

5.2.8  繼承System.Object  196

5.2.9 使用別名避免名稱空間沖突  197

5.3 在字段中存儲數據  198

5.3.1  定義字段  198

5.3.2 字段的類型  199

5.3.3 成員訪問修飾符  199

5.3.4  設置和輸出字段值  200

5.3.5 使用對象初始化器語法設置字段值  200

5.3.6  使用enum類型存儲值  201

5.3.7  使用enum類型存儲多個值  202

5.3.8  使用集合存儲多個值  203

5.3.9  理解泛型集合  203

5.3.10  使字段成為靜態字段  204

5.3.11  使字段成為常量  205

5.3.12  使字段只讀  206

5.3.13 在實例化時要求設置字段值  207

5.3.14 使用構造函數初始化字段  208

5.4  使用方法和元組  211

5.4.1  從方法返回值  211

5.4.2  定義參數並將參數傳遞給方法  211

5.4.3  重載方法  212

5.4.4  傳遞可選參數  213

5.4.5 調用方法時的命名參數值  213

5.4.6  混用可選參數與必需參數  214

5.4.7  控制參數的傳遞方式  215

5.4.8  理解ref返回  216

5.4.9  使用元組組合多個返回值  217

5.4.10  使用局部函數實現功能  220

5.4.11  使用partial關鍵字拆分類  221

5.5  使用屬性和索引器控制訪問  222

5.5.1  定義只讀屬性  222

5.5.2  定義可設置的屬性  223

5.5.3  限制枚舉標志的值  225

5.5.4  定義索引器  227

5.6  模式匹配和對象  228

5.6.1  模式匹配飛機乘客  228

5.6.2  C# 9及更高版本對模式匹配做了增強  230

5.7  使用record類型  231

5.7.1  init-only屬性  231

5.7.2  定義record類型  232

5.7.3  record類型的相等性  233

5.7.4  記錄中的位置數據成員  234

5.7.5 在類中定義主構造函數  235

5.8  實踐和探索  236

5.8.1  練習5.1:測試你掌握的知識  236

5.8.2  練習5.2:練習使用訪問修飾符  237

5.8.3 練習5.3:探索主題  237

5.9  本章小結  237

第6章  實現接口和繼承類  238

6.1  建立類庫和控制台應用程序  238

6.2  靜態方法和重載運算符  240

6.2.1  使用方法實現功能  240

6.2.2  使用運算符實現功能  244

6.3 使用泛型安全地重用類型  246

6.3.1  使用非泛型類型  246

6.3.2  使用泛型類型  248

6.4  觸發和處理事件  249

6.4.1  使用委托調用方法  249

6.4.2  定義和處理委托  250

6.4.3  定義和處理事件  252

6.5  實現接口  254

6.5.1  公共接口  254

6.5.2  排序時比較對象  254

6.5.3  使用單獨的類比較對象  258

6.5.4  隱式和顯式的接口實現  259

6.5.5  使用默認實現定義接口  260

6.6  使用引用類型和值類型管理內存  262

6.6.1  理解棧內存和堆內存  262

6.6.2  定義引用類型和值類型  262

6.6.3  如何在內存中存儲引用類型和值類型  263

6.6.4  理解裝箱  264

6.6.5  類型的相等性  265

6.6.6  定義struct類型  267

6.6.7  定義record struct類型  268

6.6.8  釋放非托管資源  269

6.6.9  確保調用Dispose方法  270

6.7  使用空值  271

6.7.1  使值類型可為空  271

6.7.2  瞭解與null相關的縮略詞  273

6.7.3  理解可空引用類型  273

6.7.4  控制可空性警告檢查特性  274

6.7.5  禁用null值和其他編譯器警告  274

6.7.6 聲明非可空變量和參數  275

6.7.7  檢查null  277

6.8  從類繼承  279

6.8.1  擴展類以添加功能  280

6.8.2  隱藏成員  280

6.8.3  瞭解this和base關鍵字  281

6.8.4 覆蓋成員  281

6.8.5  從抽象類繼承  282

6.8.6  選擇接口還是抽象類  283

6.8.7 防止繼承和覆蓋  283

6.8.8  理解多態  284

6.9  在繼承層次結構中進行類型轉換  285

6.9.1  隱式類型轉換  286

6.9.2  顯式類型轉換  286

6.9.3  避免類型轉換異常  286

6.10  繼承和擴展.NET類型  288

6.10.1  繼承異常  288

6.10.2  無法繼承時擴展類型  289

6.11 總結自定義類型的選擇  291

6.11.1 自定義類型的分類及其功能  291

6.11.2 可變性與record類型  292

6.11.3 比較繼承與實現  293

6.11.4 回顧示例代碼  293

6.12  實踐和探索  295

6.12.1  練習6.1:測試你掌握的知識  295

6.12.2  練習6.2:練習創建繼承層次結構  296

6.12.3  練習6.3:編寫更好的代碼  296

6.12.4  練習6.4:探索主題  296

6.13  本章小結  296

第7章  打包和分發.NET類型  298

7.1  .NET 8簡介  298

7.2  瞭解.NET組件  300

7.2.1  程序集、NuGet包和名稱空間  300

7.2.2  Microsoft .NET project SDK  301

7.2.3  理解程序集中的名稱空間和類型  301

7.2.4  NuGet包  302

7.2.5  理解框架  302

7.2.6  導入名稱空間以使用類型  302

7.2.7  將C#關鍵字與.NET類型相關聯  303

7.2.8  使用.NET Standard在舊平臺之間共享代碼  306

7.2.9  理解不同SDK中類庫的默認設置  306

7.2.10  創建.NET Standard 類庫  307

7.2.11  控制.NET SDK  308

7.2.12 混合使用SDK和目標框架  309

7.3  發布用於部署的代碼  310

7.3.1  創建要發布的控制台應用程序  310

7.3.2  理解dotnet命令  312

7.3.3  獲取關於.NET及其環境的信息  313

7.3.4  使用dotnet CLI管理項目  313

7.3.5  發布自包含的應用程序  314

7.3.6  發布單文件應用  316

7.3.7  使用app trimming系統減小應用程序的大小  316

7.3.8  控制構建產物的生成位置  317

7.4 原生ATO編譯  318

7.4.1 本地AOT 的限制  318

7.4.2 反射與原生AOT  319

7.4.3 原生AOT的要求  319

7.4.4 為項目啟用原生AOT  320

7.4.5 構建原生AOT項目  320

7.4.6 發布原生AOT項目  321

7.5 反編譯.NET程序集  322

7.5.1  使用Visual Studio 2022的ILSpy擴展進行反編譯  322

7.5.2  使用Visual Studio 2022查看源鏈接  325

7.5.3  不能在技術上阻止反編譯  326

7.6  為NuGet分發打包自己的庫  327

7.6.1  引用NuGet包  327

7.6.2  為NuGet打包庫  328

7.6.3  使用工具探索NuGet包  332

7.6.4  測試類庫包  333

7.7  使用預覽功能  334

7.7.1  需要預覽功能  335

7.7.2  使用預覽功能  335

7.7.3 方法攔截器  335

7.8  實踐和探索  336

7.8.1  練習7.1:測試你掌握的知識  336

7.8.2  練習7.2:探索主題  336

7.8.3  練習7.3:從.NET Framework移植到現代.NET  336

7.8.4 練習 7.4:創建源代碼生成器  336

7.8.5 練習7.5:探索PowerShell  336

7.8.6 練習7.6:提升.NET性能  337

7.9  本章小結  337

第8章  使用常見的.NET類型  338

8.1  處理數字  338

8.1.1  處理大的整數  338

8.1.2  處理復數  339

8.1.3 為游戲和類似應用程序生成隨機數  340

8.1.4  生成GUID  342

8.2  處理文本  343

8.2.1  獲取字符串的長度  343

8.2.2  獲取字符串中的字符  344

8.2.3  拆分字符串  344

8.2.4  獲取字符串的一部分  344

8.2.5  檢查字符串的內容  345

8.2.6  比較字符串值  345

8.2.7 連接、格式化和其他的字符串成員  347

8.2.8  高效地連接字符串  348

8.3  模式匹配與正則表達式  349

8.3.1  檢查作為文本輸入的數字  349

8.3.2  改進正則表達式的性能  350

8.3.3  正則表達式的語法  350

8.3.4  正則表達式示例  351

8.3.5  拆分使用逗號分隔的復雜字符串  351

8.3.6  激活正則表達式語法著色功能  353

8.3.7  使用源生成器提高正則表達式的性能  355

8.4  在集合中存儲多個對象  357

8.4.1  所有集合的公共特性  357

8.4.2  使用列表  358

8.4.3 字典  361

8.4.4 集、堆棧和隊列  364

8.4.5  集合的Add和Remove方法  367

8.4.6 集合的排序  367

8.4.7  使用專門的集合  368

8.4.8  只讀集合、不可變集合和凍結集合  368

8.4.9 使用集合表達式初始化集合  372

8.4.10 集合的最佳實踐  372

8.5  使用Span、索引和範圍  373

8.5.1  通過Span高效地使用內存  373

8.5.2  用索引類型標識位置  374

8.5.3  使用Range類型標識範圍  374

8.5.4  使用索引、範圍和Span  374

8.6 實踐和探索  375

8.6.1  練習8.1:測試你掌握的知識  375

8.6.2  練習8.2:練習正則表達式  375

8.6.3  練習8.3:練習編寫擴展方法  376

8.6.4  練習8.4:使用網絡資源  376

8.6.5  練習8.5:探索主題  376

8.7  本章小結  376

第9章  處理文件、流和序列化  377

9.1  管理文件系統  377

9.1.1  處理跨平臺環境和文件系統  377

9.1.2  管理驅動器  380

9.1.3  管理目錄  382

9.1.4  管理文件  383

9.1.5  管理路徑  384

9.1.6  獲取文件信息  385

9.1.7  控制處理文件的方式  385

9.2  用流來讀寫  386

9.2.1  理解抽象和具體的流  386

9.2.2 構建流管道  388

9.2.3  寫入文本流  388

9.2.4  寫入XML流  390

9.2.5  壓縮流  394

9.2.6 使用隨機訪問句柄進行讀寫  396

9.3  編碼和解碼文本  397

9.3.1  將字符串編碼為字節數組  398

9.3.2  對文件中的文本進行編碼和解碼  400

9.4  序列化對象圖  400

9.4.1  序列化為XML  401

9.4.2  生成緊湊的XML  404

9.4.3  反序列化XML文件  405

9.4.4  用JSON序列化  406

9.4.5  高性能的JSON處理  407

9.4.6 反序列化JSON文件  407

9.4.7  控制處理JSON的方式  408

9.5 使用環境變量  411

9.5.1 讀取所有環境變量  411

9.5.2 展開、設置和獲取環境變量  413

9.6  實踐和探索  415

9.6.1  練習9.1:測試你掌握的知識  415

9.6.2  練習9.2:練習序列化為XML  416

9.6.3 練習9.3:使用tar存盤  416

9.6.4 練習9.4:從Newtonsoft遷移到新的JSON  416

9.6.5  練習9.5:探索主題  416

9.7  本章小結  417

第10章  使用Entity Framework Core處理數據  418

10.1  理解現代數據庫  418

10.1.1 理解舊的實體框架  419

10.1.2 理解Entity Framework Core  419

10.1.3 理解數據庫優先和代碼優先  420

10.1.4 EF Core的性能改進  420

10.1.5 使用示例關系數據庫  420

10.1.6 使用SQLite  421

10.1.7  使用SQL Server還是其他SQL系統  422

10.1.8  為Windows設置SQLite  422

10.1.9  為macOS和Linux設置SQLite  423

10.2 在.NET項目中設置EF Core  423

10.2.1 為使用EF Core創建控制台應用程序  423

10.2.2 為SQLite創建Northwind示例數據庫  423

10.2.3 使用SQLiteStudio管理Northwind示例數據庫  424

10.2.4 使用輕量級的ADO.NET數據庫提供程序  426

10.2.5 選擇EF Core數據庫提供程序  426

10.2.6 連接到命名的SQLite數據庫  427

10.2.7 定義Northwind數據庫上下文類  427

10.3  定義EF Core模型  428

10.3.1 使用EF Core約定定義模型  428

10.3.2 使用EF Core註解特性定義模型  429

10.3.3 使用EF Core Fluent API定義模型  431

10.3.4  理解數據播種和Fluent API  431

10.3.5 為Northwind表構建EF Core模型  431

10.3.6  定義Category和Product實體類  432

10.3.7 向Northwind數據庫上下文類添加表  434

10.3.8 安裝dotnet-ef工具  435

10.3.9 使用現有數據庫搭建模型  436

10.3.10 自定義逆向工程模板  440

10.3.11 配置約定前模型  440

10.4  查詢EF Core模型  441

10.4.1 過濾結果中返回的實體  443

10.4.2 過濾和排序產品  445

10.4.3 獲取生成的SQL  446

10.4.4 記錄EF Core  447

10.4.5  根據特定於提供程序的值過濾日誌  449

10.4.6  使用查詢標記進行日誌記錄  449

10.4.7 獲取單個實體  450

10.4.8 使用Like進行模式匹配  451

10.4.9 在查詢中生成隨機數  453

10.4.10 定義全局過濾器  454

10.5  使用EF Core加載和跟蹤模式  454

10.5.1 使用Include擴展方法立即加載實體  454

10.5.2 啟用延遲加載  455

10.5.3 使用Load方法顯式加載實體  456

10.5.4 控制實體跟蹤  458

10.5.5 3種跟蹤場景  459

10.5.6 延遲加載未啟用跟蹤的查詢  460

10.6  使用EF Core修改數據  461

10.6.1 插入實體  462

10.6.2 更新實體  464

10.6.3 刪除實體  465

10.6.4 更高效地更新和刪除  466

10.6.5 池化數據庫環境  469

10.7  實踐和探索  469

10.7.1 練習10.1:測試你掌握的知識  470

10.7.2 練習10.2:練習使用不同的序列化格式導出數據  470

10.7.3 練習10.3:使用事務  470

10.7.4 練習10.4:探索代碼優先EF Core模型  470

10.7.5 練習10.5:探索應用程序機密  470

10.7.6 練習10.6:探索主題  471

10.7.7 練習10.7:探索NoSQL數據庫  471

10.8  本章小結  471

第11章  使用LINQ查詢和操作數據  472

11.1  編寫LINQ表達式  472

11.1.1 對比命令式語言和聲明式語言的特性  472

11.1.2 LINQ的組成  473

11.1.3 使用Enumerable類構建LINQ表達式  473

11.2 LINQ的現實應用  475

11.2.1 理解延遲執行  475

11.2.2 使用Where擴展方法過濾實體  477

11.2.3 以命名方法為目標  479

11.2.4 通過刪除委托的顯式實例化來簡化代碼  480

11.2.5 以lambda表達式為目標  480

11.2.6 具有默認參數值的lambda表達式  480

11.3  排序及其他操作  481

11.3.1  使用OrderBy擴展方法按單個屬性排序  481

11.3.2  使用ThenBy擴展方法按後續屬性排序  481

11.3.3 按項自身排序  482

11.3.4 使用var或指定類型聲明查詢  482

11.3.5 根據類型進行過濾  483

11.3.6 處理集合和bag  484

11.4  使用LINQ與EF Core  486

11.4.1 為探索LINQ to Entities來創建一個控制台應用程序  486

11.4.2 構建EF Core模型  487

11.4.3 序列的過濾和排序  489

11.4.4 將序列投影到新的類型中  492

11.5  連接、分組和查找  493

11.5.1  連接序列  494

11.5.2  分組連接序列  495

11.5.3  分組查找  496

11.6  聚合和分頁序列  498

11.6.1 檢查空序列  500

11.6.2 小心使用Count  500

11.6.3 使用LINQ分頁  502

11.6.4 使用語法糖美化LINQ語法  505

11.7  實踐和探索  506

11.7.1 練習11.1:測試你掌握的知識  506

11.7.2 練習11.2:練習使用LINQ進行查詢  507

11.7.3 練習11.3:在並行LINQ中使用多線程  507

11.7.4 練習11.4:使用LINQ to XML  507

11.7.5 練習11.5:創建自己的LINQ擴展方法  507

11.7.6 練習11.6:探索主題  508

11.8  本章小結  508

第12章  使用ASP.NET Core進行Web開發  509

12.1  理解ASP.NET Core  509

12.1.1  經典ASP.NET與現代ASP.NET Core的對比  510

12.1.2  使用ASP.NET Core構建網站  511

12.1.3  ASP.NET Core中使用的不同文件類型  511

12.1.4  使用內容管理系統構建網站  512

12.1.5  使用SPA框架構建Web應用程序  512

12.1.6  構建Web服務和其他服務  513

12.2  結構化項目  513

12.3  建立實體模型供本書剩餘部分章節使用  515

12.3.1  創建Northwind數據庫  515

12.3.2  使用SQLite創建實體模型類庫  515

12.3.3  使用SQLite為數據庫上下文創建類庫  517

12.3.4  自定義模型並定義擴展方法  519

12.3.5  註冊依賴服務的作用域  522

12.3.6  使用SQL Server為實體模型創建類庫  522

12.3.7  改進類到表的映射  522

12.3.8  測試類庫  524

12.4  瞭解Web開發  527

12.4.1  理解HTTP  527

12.4.2  使用Google Chrome瀏覽器發出HTTP請求  528

12.4.3  瞭解客戶端Web開發技術  530

12.5  實踐和探索  530

12.5.1  練習12.1:測試你掌握的知識  530

12.5.2  練習12.2:瞭解Web開發中常用的縮寫  531

12.5.3  練習12.3:探索主題  531

12.6  本章小結  531

第13章  使用ASP.NET Core Razor Pages構建網站  532

13.1  瞭解ASP.NET Core  532

13.1.1  創建空的ASP.NET Core項目  532

13.1.2  測試和保護網站  535

13.1.3  啟用更強的安全性並重定向到安全連接  538

13.1.4  控制托管環境  539

13.1.5  使網站能夠提供靜態內容  540

13.2  瞭解ASP.NET Core Razor Pages  543

13.2.1  啟用Razor Pages  543

13.2.2  給Razor Pages添加代碼  544

13.2.3  對Razor Pages使用共享佈局  545

13.2.4  臨時存儲數據  547

13.2.5  使用後台代碼文件與Razor Pages  549

13.2.6  配置ASP.NET Core項目中包含的文件  551

13.2.7  項目文件構建操作  552

13.3  使用Entity Framework Core與ASP.NET Core  553

13.3.1  將Entity Framework Core配置為服務  553

13.3.2  啟用模型以插入實體  555

13.3.3  定義用來插入新供應商的表單  556

13.3.4  將依賴服務註入Razor Pages中  556

13.4  配置服務和HTTP請求管道  557

13.4.1  瞭解端點路由  557

13.4.2 配置端點路由  557

13.4.3 查看項目中的端點路由配置  557

13.4.4 配置HTTP管道  559

13.4.5 總結關鍵的中間件擴展方法  560

13.4.6 可視化HTTP管道  560

13.4.7 實現匿名內聯委托作為中間件  561

13.5  實踐和探索  563

13.5.1 練習13.1:測試你掌握的知識  563

13.5.2 練習13.2:使用Razor類庫  563

13.5.3 練習13.3:啟用HTTP/3和對請求解壓縮的支持  563

13.5.4 練習13.4:練習構建數據驅動的網頁  563

13.5.5 練習13.5:練習為函數構建Web頁面  564

13.5.6 練習13.6:Bootstrap簡介  564

13.5.7 練習13.7:探索主題  564

13.5.8 練習13.8:使用MVC模式構建網站  564

13.6  本章小結  565

第14章  構建和消費Web服務  566

14.1  使用ASP.NET Core Web API構建Web服務  566

14.1.1 理解Web服務縮寫詞  566

14.1.2 理解Web API的HTTP請求和響應  567

14.1.3 創建ASP.NET Core Web API項目  569

14.1.4 檢查Web服務的功能  572

14.2  為Northwind示例數據庫創建Web服務  573

14.2.1 註冊依賴服務  574

14.2.2 創建帶實體緩存的數據存儲庫  575

14.2.3 路由Web服務  578

14.2.4  路由約束  578

14.2.5  ASP.NET Core 8中的短路路由  579

14.2.6  ASP.NET Core 8中改進的路由工具  579

14.2.7  理解操作方法的返回類型  579

14.2.8 配置客戶存儲庫和Web API控制器  580

14.2.9 指定問題的細節  584

14.2.10 控制XML序列化  585

14.3  記錄和測試Web服務  586

14.3.1 使用瀏覽器測試GET請求  586

14.3.2  使用HTTP/REST工具發出GET請求  587

14.3.3  使用HTTP/REST工具發出其他請求  588

14.3.4 傳遞環境變量  589

14.3.5 理解Swagger  590

14.3.6 使用Swagger UI測試請求  590

14.3.7 啟用HTTP日誌記錄  593

14.3.8 W3CLogger支持記錄額外的請求頭  595

14.4  使用HTTP客戶端消費Web服務  596

14.4.1 瞭解HttpClient類  596

14.4.2 使用HttpClientFactory配置HTTP客戶端  596

14.4.3 在控制器中以JSON格式獲取客戶  596

14.4.4 啟動多個項目  599

14.4.5 啟動Web服務和MVC客戶端項目  600

14.5  實踐和探索  601

14.5.1 練習14.1:測試你掌握的知識  601

14.5.2 練習14.2:練習使用HttpClient創建和刪除客戶  601

14.5.3 練習14.3:為Web服務實現高級特性  601

14.5.4 練習14.4:使用最小API構建Web服務  602

14.5.5 練習14.5:探索主題  602

14.6  本章小結  602

第15章  使用Blazor構建用戶界面  603

15.1  Blazor的歷史  603

15.1.1 JavaScript和它的朋友們  603

15.1.2 Silverlight——使用插件的C#和.NET  604

15.1.3 WebAssembly——Blazor的目標  604

15.1.4 .NET 7和更早版本中的Blazor托管模型  604

15.1.5 .NET 8統一了Blazor托管模型  604

15.1.6 理解Blazor組件  605

15.1.7 比較Blazor和Razor  606

15.2 Blazor Web App項目模板簡介  606

15.2.1 創建一個Blazor Web App項目  606

15.2.2 Blazor的路由、佈局和導航  608

15.2.3 運行Blazor Web App項目模板  614

15.3  使用Blazor構建組件  615

15.3.1 定義和測試簡單的Blazor組件  615

15.3.2 使用Bootstrap圖標  616

15.3.3 將組件轉換成可路由的頁面組件  617

15.3.4 將實體放入組件  617

15.3.5 為Blazor組件抽象服務  618

15.3.6  啟用流式渲染  622

15.3.7 使用EditForm組件定義表單  623

15.3.8 構建客戶詳細信息組件  623

15.3.9 構建創建、編輯和刪除客戶的組件  625

15.3.10 啟用服務器端交互  627

15.3.11 測試客戶組件  627

15.4 使用WebAssembly啟用客戶端執行  628

15.5  實踐和探索  628

15.5.1 練習15.1:測試你掌握的知識  628

15.5.2 練習15.2:通過創建乘法表組件進行練習  629

15.5.3 練習15.3:通過創建國家導航項進行練習  629

15.5.4 練習15.4:增強Blazor應用程序  630

15.5.5 練習15.5:使用開源的Blazor組件庫  630

15.5.6 練習15.6:探索主題  630

15.6  本章小結  630

第16章  結語  631

16.1 C#和.NET學習之旅的下一步  631

16.1.1 使用設計指南來完善技能  631

16.1.2 本書的配套圖書  632

16.1.3 可以讓學習更深入的其他圖書  633

16.2 祝你好運  633

16.3 分享意見  633

—— 以下內容可掃描封底二維碼下載 ——

附錄A  練習題答案  634

使用MVC模式構建網站  653

最後瀏覽商品 (20)