第一單元 ORM 介紹

来源:https://www.cnblogs.com/xuyubing/archive/2023/11/26/17856573.html
-Advertisement-
Play Games

需要有的知識點: c# 基礎以及c#高級基礎 Ado.net 基礎 SqlServer 以及MySQL (都需要高級部分) Asp.net Mvc Core 基礎 1. 新手的煩惱 (1) SQL 拼不對,錯還不會找 (2) 開發效率低 (3) 如果發現欄位需要重命名,得挨個地方去修改 (4) 老闆 ...


需要有的知識點:

  1. c# 基礎以及c#高級基礎

  2. Ado.net 基礎

  3. SqlServer 以及MySQL (都需要高級部分)

  4. Asp.net Mvc Core 基礎

 

1. 新手的煩惱

(1) SQL 拼不對,錯還不會找

(2) 開發效率低

(3) 如果發現欄位需要重命名,得挨個地方去修改

(4) 老闆說要把SQLServer換成MySQL資料庫,並且需要快速上線,此時你想的不是快速上線,而是快速離職

 

ORM 框架基本解決了上述的所有問題。

 

2. 什麼是ORM

ORM(Object-relational mapping),中文翻譯為對象關係映射,是一種為瞭解決面向對象與關係資料庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述對象和資料庫之間映射的元數據,將程式中的對象自動持久化到關係資料庫中。

 

ORM框架的優/缺點

優點:

  1. 提高開發效率

  2. 更符合面向對象思想

  3. 可以快速重命名

  4. 可以無縫切換資料庫

缺點:

  1. 降低了系統的執行效率

  2. 遇到很複雜的查詢時,顯得有些吃力

 

常見的ORM框架

  1. EntityFramework Core

  2. NHibnate(年代久遠)

  3. SqlSugger(當下比較流行)

  4. Dapper(半ORM)

  5. MyBatis.Net (需要寫一大堆的XML)

  6. MyBatisPlus (Java開發最流行)

 

選擇EntityFrameworkCore的原因:

  1. 微軟的親兒子, 對接了微軟的眾多其他需要數據訪問的框架,例如ASP.NET Identity,ASP.NET WebApi

  2. 全面支持LINQ查詢

  3. EFCore性能提升, 已非常接近原生的ADO.NET框架了

  4. 資料庫遷移功能 ,可以動態創建資料庫或者修改資料庫

 

3. EntityFrameworkCore概述

Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數據訪問技術。

EF Core 可用作對象關係映射程式 (O/RM),這可以實現以下兩點:

  • 使 .NET 開發人員能夠使用 .NET 對象處理資料庫。

  • 無需再像平常那樣編寫大部分數據訪問代碼。

EF Core 支持多個資料庫引擎,請參閱資料庫提供程式瞭解詳細信息。

1. 模型開發方式

對於 EF Core,使用模型執行數據訪問。 模型由實體類和表示資料庫會話的上下文對象構成。 上下文對象允許查詢並保存數據。 有關詳細信息,請參閱創建模型

EF 支持以下模型開發方法:

  • 從現有資料庫生成模型(DbFirst)。

  • 對模型手動編碼,使其符合資料庫(DbFirst)。

  • 創建模型後,使用 EF 遷移從模型創建資料庫。 模型發生變化時,遷移可讓資料庫不斷演進(CodeFirst)。

 

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) Microsoft.EntityFrameworkCore.SqlServer
Azure Cosmos DB .UseCosmos(connectionString, databaseName) Microsoft.EntityFrameworkCore.Cosmos
SQLite .UseSqlite(connectionString) Microsoft.EntityFrameworkCore.Sqlite
EF Core 記憶體中資料庫 .UseInMemoryDatabase(databaseName) Microsoft.EntityFrameworkCore.InMemory
PostgreSQL* .UseNpgsql(connectionString) Npgsql.EntityFrameworkCore.PostgreSQL
MySQL/MariaDB* .UseMySql(connectionString) Pomelo.EntityFrameworkCore.MySql
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 還原本地工具清單中定義的工具。

使用用於 EF Core 遷移現有資料庫中的反向工程(基架)的工具需要安裝相應的工具包:

請參閱 Entity Framework Core 工具參考,詳細瞭解如何使用 EF Core 工具,包括如何在項目中或在全局範圍內正確安裝 dotnet-ef 工具。

$ 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>   生成配置,例如 DebugRelease
--runtime <IDENTIFIER>   要為其還原包的目標運行時的標識符。 有關運行時標識符 (RID) 的列表,請參閱 RID 目錄
--no-build   請勿生成項目。 旨在在生成處於最新狀態時使用。
--help -h 顯示幫助信息。
--verbose -v 顯示詳細輸出。
--no-color   請勿為輸出著色。
--prefix-output   具有級別的首碼輸出。

 

 

視頻配套鏈接:課程簡介 (cctalk.com)

海闊平魚躍,天高任我行,給我一片藍天,讓我自由翱翔。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 類應該是被封裝的,類的用戶通過介面使用類提供的功能,而不必關心類的內部如何實現。然而,C++標準庫容器 std::vector 的實現滲透到了介面中來。對於以下代碼: const int pushNum = 10; std::vector<int> v = { 1,2,3 }; int* p = & ...
  • Bug1 自定義被限流的後續操作@SentinelResource(blockHandler = "blockHandler"),其中blockHandler處理函數不執行 前置條件 //定義的資源 @GetMapping("/resource") @SentinelResource(value = ...
  • 電腦安全和數據隱私是現代應用程式設計中至關重要的方面。為了確保數據的機密性和完整性,常常需要使用加密和解密演算法。C++是一種廣泛使用的編程語言,提供了許多加密和解密演算法的實現。本文將介紹一些在C++中常用的加密與解密演算法,這其中包括Xor異或、BASE64、AES、MD5、SHA256、RSA等。 ...
  • 位運算 題目背景 題目由 daiyulong20120222 創作(me) 並由 QBW1117完善以及數據 。 題目描述 給定兩個數\(x,y\) ,在給定一個位運算符號 \(c\)。 請你列出 \(x,y\) 進行 \(c\) 位運算是的算數豎式式。 註: 豎式這麼列: 顯示出兩個數的完整二進位 ...
  • 主要介紹了第一個Spring MVC程式的環境搭建、父子項目結構、Tomcat配置、配置文件。對DispatcherServlet的講解,2個核心類型:1.RequestMappingHandlerMapping 2.RequestMappingHandlerAdapter,視圖解析器ViewRes... ...
  • matplotlib是基於python生態開發的一個可視化繪圖庫,它的出現讓python在數據分析及機器學習方面占了重要的一部分,目前很多數據分析及機器學習相關方面的工程都有使用到這個庫,並且由於其簡單易用,安裝簡單等方面的優勢深得廣大開發者的喜愛。 ...
  • HtmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文本轉換為DOM文檔對象,方便我們對HTML文本進行操作和分析。HtmlAgilityPack支持XPath語法,可以通過XPath表達式來獲取DOM節點,同時還提供了一些方便的API,可以實現HTML文本的解析、修 ...
  • MVC 的過濾器(Filters)也翻譯為“篩選器”。但是老周更喜歡翻譯為“過濾器”,意思上更好理解。 既然都叫過濾器了,就是在MVC的操作方法調用前後進行特殊處理的類型。比如: a、此調用是否已授權? b、在模型綁定之前要不要修改數據源?(可能含有兒童不宜的數據) c、在調用MVC方法前要不要改一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...