.Net Core中使用EFCore生成反向工程
一、簡(jiǎn)要步驟
1、第一步
安裝以下程序包
- 安裝Entity FrameWork Core SqlServer 3.1
- 安裝Entity FrameWork Core Tools 3.1
- 安裝Entity FrameWork Core Design 3.1
2、第二步
選擇默認(rèn)項(xiàng)目為放Model的項(xiàng)目,在程序包管理控制臺(tái) 輸入:
Scaffold-DbContext '數(shù)據(jù)庫(kù)連接字符串' Microsoft.EntityFrameworkCore.SqlServer -o Model -v
- -o :表示輸出到xxx Model是生成文件以后所在的文件夾的名字,也可以用''代替會(huì)直接生成到項(xiàng)目的根目錄。
- -v: 表示顯示錯(cuò)誤信息
- -Force :更新表
- -Tables 表名 :只操作某張表
- -Context :Context類名
示例:自動(dòng)生成MainDB的Context類和UserInfo實(shí)體類。
Scaffold-DbContext 'Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=sa123' Microsoft.EntityFrameworkCore.SqlServer -o '' -Tables UserInfo -Force -Context MainDB -v
提示:微軟官網(wǎng)提示 Sql Server版本必須在2012以上。
二、詳細(xì)解釋
- 1.反向工程是實(shí)體類型類和一個(gè)基于數(shù)據(jù)庫(kù)架構(gòu)的 DbContext 類的基架的過(guò)程
- 2.Scaffold-DbContext(數(shù)據(jù)庫(kù)上下文腳手架)
使用Scaffold-DbContext(數(shù)據(jù)庫(kù)上下文腳手架)指令生成models和context
- 3.腳手架:
編譯器(腳手架)根據(jù)程序員制定的規(guī)則收成相應(yīng)的代碼,操作數(shù)據(jù)庫(kù)(CRUD)
- 4.語(yǔ)法:
Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-Context <String>]
[-Schemas <String>] [-Tables <String>] [-DataAnnotations] [-Force] [-Project <String>]
[-StartupProject <String>] [-Environment <String>] [<CommonParameters>]
- 5.參數(shù)說(shuō)明:
[-Connection] <String>:數(shù)據(jù)庫(kù)連接字符串,將使用此連接字符串來(lái)讀取數(shù)據(jù)庫(kù)架構(gòu)。
[-Provider] <String>:第二個(gè)參數(shù)是提供程序名稱。提供程序名稱通常是與提供程序的 NuGet 包名稱相同,例如:Pomelo.EntityFrameworkCore.MySql、Microsoft.EntityFrameworkCore.SqlServer
[-OutputDir <String>]:實(shí)體類文件存放的目錄
[-Context <String>]:創(chuàng)建到一個(gè)單獨(dú)的目錄從實(shí)體類型類的基架的 DbContext 類。
[-Schemas <String>]:用于包含在架構(gòu)中的每個(gè)表
[-Tables <String>]:指定表,例如:Scaffold-DbContext ... -Tables Artist, Album
[-DataAnnotations]:保留名稱,使用原始數(shù)據(jù)庫(kù)名稱,仍將修復(fù)無(wú)效的.NET 標(biāo)識(shí)符和合成的名稱,如導(dǎo)航屬性仍將遵循.NET 命名約定
[-Force]:更新模型
[-Project <String>]:已搭建基架的 DbContext 類名稱將用作后綴的數(shù)據(jù)庫(kù)的名稱上下文默認(rèn)情況下。 若要指定一個(gè)不同,使用-Context
[-StartupProject <String>]:指定要使用的啟動(dòng)項(xiàng)目。如果省略,則使用解決方案的啟動(dòng)項(xiàng)目
[-Environment <String>]
[<CommonParameters>]
- 6.工作原理
反向工程開(kāi)始時(shí)讀取數(shù)據(jù)庫(kù)架構(gòu)。 它將讀取有關(guān)表、 列、 約束和索引的信息。
接下來(lái),它使用的架構(gòu)信息創(chuàng)建 EF Core 模型。 使用表來(lái)創(chuàng)建實(shí)體類型;使用列來(lái)創(chuàng)建屬性;和外鍵用于創(chuàng)建關(guān)系。
最后,該模型用于生成代碼。 相應(yīng)的實(shí)體類型的類、 Fluent API 和數(shù)據(jù)批注已搭建基架以重新創(chuàng)建相同的模型從您的應(yīng)用程序中。
- 7.無(wú)效情況
有關(guān)的信息繼承層次結(jié)構(gòu),固有類型,并表拆分?jǐn)?shù)據(jù)庫(kù)架構(gòu)中不存在
些列類型可能不支持通過(guò) EF Core 提供程序
表沒(méi)有主鍵是當(dāng)前不實(shí)施反向工程。
- 8.安裝程序集
--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
- 9.在程序包包管理器控制臺(tái) 中執(zhí)行以下語(yǔ)句生成 實(shí)體類
--MySQL版本:
第一次生成實(shí)體類: Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models
更新實(shí)體類:
Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force
--SQLService版本:
第一次生成實(shí)體: Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
更新實(shí)體類: 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指令已經(jīng)可以自動(dòng)映射數(shù)據(jù)庫(kù)中的視圖為實(shí)體。查詢類型表示可從數(shù)據(jù)庫(kù)讀取但無(wú)法更新的數(shù)據(jù),它已重命名為無(wú)鍵實(shí)體類型。
由于它們非常適用于映射多數(shù)場(chǎng)景中的數(shù)據(jù)庫(kù)視圖,當(dāng)執(zhí)行數(shù)據(jù)庫(kù)視圖反向工程時(shí),EF Core 現(xiàn)在將自動(dòng)創(chuàng)建無(wú)鍵實(shí)體類型。
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Names>(entity => { entity.HasNoKey(); entity.ToView("Names"); }); modelBuilder.Entity<Things>(entity => { entity.HasNoKey(); }); }
到此這篇關(guān)于.Net Core中使用EFCore生成反向工程的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- .net如何優(yōu)雅的使用EFCore實(shí)例詳解
- ASP.NET?Core?5.0中的Host.CreateDefaultBuilder執(zhí)行過(guò)程解析
- ASP.NET Core使用EF保存數(shù)據(jù)、級(jí)聯(lián)刪除和事務(wù)使用
- ASP.NET?Core使用EF查詢數(shù)據(jù)
- ASP.NET?Core使用EF創(chuàng)建模型(索引、備用鍵、繼承、支持字段)
- ASP.NET?Core使用EF?SQLite對(duì)數(shù)據(jù)庫(kù)增刪改查
- .net core實(shí)用技巧——將EF Core生成的SQL語(yǔ)句顯示在控制臺(tái)中
- 詳解.Net Core 權(quán)限驗(yàn)證與授權(quán)(AuthorizeFilter、ActionFilterAttribute)
- 在.NET Core類庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法
- .net連接oracle的3種實(shí)現(xiàn)方法
- C#利用ODP.net連接Oracle數(shù)據(jù)庫(kù)的操作方法
- .Net使用EF Core框架連接Oracle的方法
相關(guān)文章
詳解ASP.NET MVC 利用Razor引擎生成靜態(tài)頁(yè)
本篇文章主要介紹了ASP.NET MVC 利用Razor引擎生成靜態(tài)頁(yè),詳細(xì)的介紹了原理和步驟,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03asp.net基于session實(shí)現(xiàn)購(gòu)物車的方法
這篇文章主要介紹了asp.net基于session實(shí)現(xiàn)購(gòu)物車的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了asp.net使用session存儲(chǔ)臨時(shí)數(shù)據(jù)實(shí)現(xiàn)購(gòu)物車功能的相關(guān)技巧,需要的朋友可以參考下2015-11-11使用visual studio自動(dòng)創(chuàng)建IIS虛擬目錄
使用visual studio自動(dòng)創(chuàng)建IIS虛擬目錄,需要的朋友可以參考一下2013-02-02asp.net GridView中超鏈接的使用(帶參數(shù))
在GridView中,點(diǎn)擊鏈接列跳轉(zhuǎn)到指定頁(yè)面的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-03-03ASP.NET泛型四之使用Lazy<T>實(shí)現(xiàn)延遲加載
這篇文章介紹了ASP.NET泛型使用Lazy<T>實(shí)現(xiàn)延遲加載的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08WCF中使用nettcp協(xié)議進(jìn)行通訊的方法
這篇文章主要給大家介紹了關(guān)于WCF中使用nettcp協(xié)議進(jìn)行通訊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用WCF具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07詳解如何創(chuàng)建一個(gè).NET Core工程
本文主要介紹了如何創(chuàng)建一個(gè).NET Core工程,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03在.NET Core類庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法
下面小編就為大家分享一篇在.NET Core類庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12