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


反向工程-EF Core | Microsoft Docs

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


一、簡要步驟

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類名

示例:自動生成MainDB的Context類和UserInfo實體類。

Scaffold-DbContext 'Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=sa123' Microsoft.EntityFrameworkCore.SqlServer -o '' -Tables 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

 

注意:

在EF Core 3.0及以上Scaffold-DbContext指令已經可以自動映射數據庫中的視圖為實體。查詢類型表示可從數據庫讀取但無法更新的數據,它已重命名為無鍵實體類型。
由於它們非常適用於映射多數場景中的數據庫視圖,當執行數據庫視圖反向工程時,EF Core 現在將自動創建無鍵實體類型

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Names>(entity =>
    {
        entity.HasNoKey();
        entity.ToView("Names");
    });
    modelBuilder.Entity<Things>(entity =>
    {
        entity.HasNoKey();
    });
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM