需要有的知識點: c# 基礎以及c#高級基礎 Ado.net 基礎 SqlServer 以及MySQL (都需要高級部分) Asp.net Mvc Core 基礎 1. 新手的煩惱 (1) SQL 拼不對,錯還不會找 (2) 開發效率低 (3) 如果發現欄位需要重命名,得挨個地方去修改 (4) 老闆 ...
-
c# 基礎以及c#高級基礎
-
Ado.net 基礎
-
SqlServer 以及MySQL (都需要高級部分)
-
Asp.net Mvc Core 基礎
(1) SQL 拼不對,錯還不會找
(2) 開發效率低
(3) 如果發現欄位需要重命名,得挨個地方去修改
(4) 老闆說要把SQLServer換成MySQL資料庫,並且需要快速上線,此時你想的不是快速上線,而是快速離職
ORM 框架基本解決了上述的所有問題。
2. 什麼是ORM
ORM(Object-relational mapping),中文翻譯為對象關係映射,是一種為瞭解決面向對象與關係資料庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述對象和資料庫之間映射的元數據,將程式中的對象自動持久化到關係資料庫中。
ORM框架的優/缺點
優點:
-
提高開發效率
-
更符合面向對象思想
-
可以快速重命名
-
可以無縫切換資料庫
缺點:
-
降低了系統的執行效率
-
遇到很複雜的查詢時,顯得有些吃力
常見的ORM框架
-
EntityFramework Core
-
NHibnate(年代久遠)
-
SqlSugger(當下比較流行)
-
Dapper(半ORM)
-
MyBatis.Net (需要寫一大堆的XML)
-
MyBatisPlus (Java開發最流行)
選擇EntityFrameworkCore的原因:
-
微軟的親兒子, 對接了微軟的眾多其他需要數據訪問的框架,例如ASP.NET Identity,ASP.NET WebApi
-
全面支持LINQ查詢
-
EFCore性能提升, 已非常接近原生的ADO.NET框架了
-
資料庫遷移功能 ,可以動態創建資料庫或者修改資料庫
3. EntityFrameworkCore概述
Entity Framework (EF) Core 是輕量化、可擴展、
EF Core 可用作對象關係映射程式 (O/RM),這可以實現以下兩點:
-
使 .NET 開發人員能夠使用 .NET 對象處理資料庫。
-
無需再像平常那樣編寫大部分數據訪問代碼。
EF Core 支持多個資料庫引擎,請參閱
1. 模型開發方式
對於 EF Core,使用模型執行數據訪問。 模型由實體類和表示資料庫會話的上下文對象構成。 上下文對象允許查詢並保存數據。 有關詳細信息,請參閱
EF 支持以下模型開發方法:
-
從現有資料庫生成模型(DbFirst)。
-
對模型手動編碼,使其符合資料庫(DbFirst)。
-
創建模型後,使用
2. EF O/RM 註意事項
雖然 EF Core 善長提取許多編程詳細信息,但還是有一些適用於任何 O/RM 的最佳做法,可幫助避免生產應用中的常見陷阱:
-
若要在高性能生產應用中構建、調試、分析和遷移數據,必須具備基礎資料庫伺服器的中級知識或更高級別的知識。 例如,有關主鍵和外鍵、約束、索引、標準化、DML 和 DDL 語句、數據類型、分析等方面的知識。
-
功能和集成測試:請務必儘可能嚴密地複製生產環境,以便:
-
查找僅在使用特定版本的資料庫伺服器時應用才出現的問題。
-
在升級 EF Core 和其他依賴項時捕獲中斷性變更。 例如,添加或升級 ASP.NET Core、OData 或 AutoMapper 等框架。 這些依賴項可能以多種意外方式影響 EF Core。
-
-
通過代表性負載進行性能和壓力測試。 某些功能的不成熟用法縮放性不佳。 例如,多項集合包含內容、大量使用延遲載入、對未編製索引的列執行條件查詢、對存儲生成的值進行大規模更新和插入、缺乏併發處理、大型模型、緩存策略不充分。
-
安全評審:例如,連接字元串和其他機密處理、非部署操作的資料庫許可權、原始 SQL 的輸入驗證、敏感數據加密。
-
確保日誌記錄和診斷充足且可用。 例如,適當的日誌記錄配置、查詢標記和 Application Insights。
-
錯誤恢復。 為常見故障場景(如版本回退、回退伺服器、橫向擴展和負載平衡、DoS 緩解和數據備份)準備應急計劃。
-
生成的遷移的詳細檢查和測試。 將遷移應用於生產數據前,應對其進行全面測試。 若表中包含生產數據,架構的形狀和列類型就不能輕易更改。 例如,在 SQL Server 上,對於映射到字元串和十進位屬性的列,
nvarchar(max)
和decimal(18, 2)
極少成為最佳類型,但這些是 EF 使用的預設值,因為 EF 不瞭解你的具體情況。
4. Nuget 包
1. 包版本
請務必安裝 Microsoft 提供的所有 EF Core 包的同一版本。 例如,如果安裝了 5.0.3 版本的 Microsoft.EntityFrameworkCore.SqlServer,則所有其他 Microsoft.EntityFrameworkCore.* 包也必須為 5.0.3 版本。
此外,請確保所有外部包都與所使用的 EF Core 的版本相容。 特別是,檢查外部資料庫提供程式是否支持你所使用的 EF Core 版本。 EF Core 的新主版本通常需要更新的資料庫提供程式。
警告
NuGet 不強制使用一致的包版本。 請始終仔細檢查你在
.csproj
文件或等效
2. 資料庫提供程式
EF Core 通過使用“資料庫提供程式”支持不同的資料庫系統。 每個系統都有自己的資料庫提供程式,而提供程式以 NuGet 包的形式提供。 應用程式應安裝其中一個或多個提供程式包。
下表列出了常見的資料庫提供程式。 有關可用提供程式的更全面列表,請參閱
資料庫系統 | 配置示例 | NuGet 程式包 |
---|---|---|
SQL Server 或 Azure SQL | .UseSqlServer(connectionString) |
|
Azure Cosmos DB | .UseCosmos(connectionString, databaseName) |
|
SQLite | .UseSqlite(connectionString) |
|
EF Core 記憶體中資料庫 | .UseInMemoryDatabase(databaseName) |
|
PostgreSQL* | .UseNpgsql(connectionString) |
|
MySQL/MariaDB* | .UseMySql(connectionString) |
|
Oracle* PLSQL | .UseOracle(connectionString) |
[Oracle.EntityFrameworkCore]( |
這些是由社區開發和提供的熱門高質量開源提供程式。 列出的其他提供程式由 Microsoft 提供。
仔細考慮是否使用記憶體中提供程式。 它不是為生產用途而設計的,也可能不是
3. 工具
$ dotnet tool --help
install <PACKAGE_ID> 安裝全局或本地工具。本地工具將被添加到清單並還原。
uninstall <PACKAGE_ID> 卸載全局工具或本地工具。
update <PACKAGE_ID> 更新全局工具。
list 列出全局或本地安裝的工具。
run <COMMAND_NAME> 運行本地工具。
search <搜索詞> 在 nuget.org 中搜索 dotnet 工具
restore 還原本地工具清單中定義的工具。
使用用於
-
可在 Visual Studio
-
跨平臺命令行工具的
請參閱
$ dotnet tool install --help
-g, --global 為當前用戶安裝工具。
--local 安裝工具並將其添加到本地工具清單(預設)。
--tool-path <PATH> 將安裝工具的目錄。如果目錄不要放置測試結果的目錄。若不存在,將創建指定目錄。存在,將創建該目 錄。
--version <VERSION> 要安裝的工具包版本。
--configfile <FILE> 要使用的 NuGet 配置文件。
--tool-manifest <PATH> 清單文件的路徑。
--add-source <SOURCE> 添加其他要在安裝期間使用的 NuGet 包源。
--framework <FRAMEWORK> 要安裝工具的目標框架。
--prerelease 正在確定是否包括預發行包。
--disable-parallel 防止並行還原多個項目。
--ignore-failed-sources 將包源失敗視為警告。
--no-cache 不要緩存包和 HTTP 請求。
--interactive 允許命令停止和等待用戶輸入或操作(例如,用以完成身份驗證)。
-v, --verbosity <LEVEL> 設置 MSBuild 詳細程度。允許值為 q[uiet]、m[inimal]、n[ormal]、d[etailed] 和 diag[nostic]。
-a, --arch <arch> 目標體繫結構。
-?, -h, --help 顯示命令行幫助。
安裝.Net CLI
詳細步驟,請看第四單元 :數據遷移部分
$ dotnet tool install -g --version 6.0.4 dotnet-ef
常用選項
選項 | Short | 說明 |
---|---|---|
--json |
顯示 JSON 輸出。 | |
--context <DBCONTEXT> |
-c |
要使用的 DbContext 類。 僅類名或完全限定命名的空間。 如果省略此選項,EF Core 將查找上下文類。 如果有多個上下文類,則此選項是必需的。 |
--project <PROJECT> |
-p |
目標項目的項目文件夾的相對路徑。 預設值是當前文件夾。 |
--startup-project <PROJECT> |
-s |
啟動項目的項目文件夾的相對路徑。 預設值是當前文件夾。 |
--framework <FRAMEWORK> |
||
--configuration <CONFIGURATION> |
生成配置,例如 Debug 或 Release 。 |
|
--runtime <IDENTIFIER> |
要為其還原包的目標運行時的標識符。 有關運行時標識符 (RID) 的列表,請參閱 | |
--no-build |
請勿生成項目。 旨在在生成處於最新狀態時使用。 | |
--help |
-h |
顯示幫助信息。 |
--verbose |
-v |
顯示詳細輸出。 |
--no-color |
請勿為輸出著色。 | |
--prefix-output |
具有級別的首碼輸出。 |
視頻配套鏈接:課程簡介 (cctalk.com)
海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。