1. 程式人生 > 實用技巧 >.Net Core3.1上用EFCore的反向工程生成

.Net Core3.1上用EFCore的反向工程生成

原文:https://www.cnblogs.com/qidakang/p/11302327.html


一、簡要步驟

1、第一步

安裝以下程式包

  • 安裝Entity FrameWork Core 3.1
  • 安裝Entity FrameWork Core SqlServer 3.1
  • 安裝Entity FrameWork Core Tools 3.1
  • 安裝Entity FrameWork Core Design 3.1

2、第二步

選擇預設專案為放Model的專案,在程式包管理控制檯 輸入:

Scaffold-DbContext '資料庫連線字串' Microsoft.EntityFrameworkCore.SqlServer -o Model -v

  1. -o :表示輸出到xxx   Model是生成檔案以後所在的資料夾的名字,也可以用''代替會直接生成到專案的根目錄。
  2. -v: 表示顯示錯誤資訊
  3. -Force :更新表
  4. -Tables 表名 :只操作某張表
  5. -Context :Context類名

示例:

Scaffold-DbContext 'Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=sa123' Microsoft.EntityFrameworkCore.SqlServer -o '' -Talbes UserInfo -Force -Context MainDB -v

提示:微軟官網提示 Sql Server版本必須在2012以上。

二、詳細解釋

1.反向工程是實體型別類和一個基於資料庫架構的 DbContext 類的基架的過程
2.Scaffold-DbContext(資料庫上下文腳手架)
    使用Scaffold-DbContext(資料庫上下文腳手架)指令生成models和context
2.腳手架:
    編譯器(腳手架)根據程式設計師制定的規則收成相應的程式碼,操作資料庫(CRUD)
3.語法:

Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-Context <String>]

[-Schemas <String>] [-Tables <String>] [-DataAnnotations] [-Force] [-Project <String>]
[-StartupProject <String>] [-Environment <String>] [<CommonParameters>]

4.引數說明:
    [-Connection] <String>:資料庫連線字串,將使用此連線字串來讀取資料庫架構。
    [-Provider] <String>:第二個引數是提供程式名稱。提供程式名稱通常是與提供程式的 NuGet 包名稱相同,例如:Pomelo.EntityFrameworkCore.MySql、Microsoft.EntityFrameworkCore.SqlServer
    [-OutputDir <String>]:實體類檔案存放的目錄
    [-Context <String>]:建立到一個單獨的目錄從實體型別類的基架的 DbContext 類。
    [-Schemas <String>]:用於包含在架構中的每個表
    [-Tables <String>]:指定表,例如:Scaffold-DbContext ... -Tables Artist, Album
    [-DataAnnotations]:保留名稱,使用原始資料庫名稱,仍將修復無效的.NET 識別符號和合成的名稱,如導航屬性仍將遵循.NET 命名約定
    [-Force]:更新模型
    [-Project <String>]:已搭建基架的 DbContext 類名稱將用作字尾的資料庫的名稱上下文預設情況下。 若要指定一個不同,使用-Context
    [-StartupProject <String>]:指定要使用的啟動專案。如果省略,則使用解決方案的啟動專案
    [-Environment <String>]
    [<CommonParameters>]
5.工作原理
    反向工程開始時讀取資料庫架構。 它將讀取有關表、 列、 約束和索引的資訊。
    接下來,它使用的架構資訊建立 EF Core 模型。 使用表來建立實體型別;使用列來建立屬性;和外來鍵用於建立關係。
    最後,該模型用於生成程式碼。 相應的實體型別的類、 Fluent API 和資料批註已搭建基架以重新建立相同的模型從您的應用程式中。
6.無效情況
    有關的資訊繼承層次結構,固有型別,並表拆分資料庫架構中不存在
    些列型別可能不支援通過 EF Core 提供程式
    表沒有主鍵是當前不實施反向工程。
7.安裝程式集
--MySQL版本:
    MySql.Data.EntityFrameworkCore
    Pomelo.EntityFrameworkCore.MySql
    Microsoft.EntityFrameworkCore.Tools
    Microsoft.VisualStudio.Web.CodeGeneration.Design
--SQLService版本:
    Microsoft.EntityFrameworkCore
    Microsoft.EntityFrameworkCore.SqlServer
    Microsoft.EntityFrameworkCore.Tools
    Microsoft.VisualStudio.Web.CodeGeneration.Design
8.在程式包包管理器控制檯 中執行以下語句生成 實體類
--MySQL版本:
  第一次生成實體類:
    Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models
  更新實體類:
    Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

--SQLService版本:
  第一次生成實體:
    Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
  更新實體類:
    Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force