原文: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
- -o :表示輸出到xxx Model是生成文件以后所在的文件夾的名字,也可以用''代替會直接生成到項目的根目錄。
- -v: 表示顯示錯誤信息
- -Force :更新表
- -Tables 表名 :只操作某張表
- -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(); }); }