第一單元 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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...