日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

.Net?Core中使用EFCore生成反向工程_實用技巧

作者:springsnow ? 更新時間: 2022-08-06 編程語言

一、簡要步驟

1、第一步

安裝以下程序包

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

2、第二步

選擇默認項目為放Model的項目,在程序包管理控制臺 輸入:

Scaffold-DbContext '數(shù)據(jù)庫連接字符串' 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

提示:微軟官網(wǎng)提示 Sql Server版本必須在2012以上。

?二、詳細解釋

  • 1.反向工程是實體類型類和一個基于數(shù)據(jù)庫架構(gòu)的 DbContext 類的基架的過程?
  • 2.Scaffold-DbContext(數(shù)據(jù)庫上下文腳手架)?

使用Scaffold-DbContext(數(shù)據(jù)庫上下文腳手架)指令生成models和context?

  • 3.腳手架:?

編譯器(腳手架)根據(jù)程序員制定的規(guī)則收成相應(yīng)的代碼,操作數(shù)據(jù)庫(CRUD)?

  • 4.語法:

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ù)說明:?

[-Connection] <String>:數(shù)據(jù)庫連接字符串,將使用此連接字符串來讀取數(shù)據(jù)庫架構(gòu)。?
[-Provider] <String>:第二個參數(shù)是提供程序名稱。提供程序名稱通常是與提供程序的 NuGet 包名稱相同,例如:Pomelo.EntityFrameworkCore.MySql、Microsoft.EntityFrameworkCore.SqlServer?
[-OutputDir <String>]:實體類文件存放的目錄?
[-Context <String>]:創(chuàng)建到一個單獨的目錄從實體類型類的基架的 DbContext 類。?
[-Schemas <String>]:用于包含在架構(gòu)中的每個表?
[-Tables <String>]:指定表,例如:Scaffold-DbContext ... -Tables Artist, Album?
[-DataAnnotations]:保留名稱,使用原始數(shù)據(jù)庫名稱,仍將修復(fù)無效的.NET 標(biāo)識符和合成的名稱,如導(dǎo)航屬性仍將遵循.NET 命名約定?
[-Force]:更新模型?
[-Project <String>]:已搭建基架的 DbContext 類名稱將用作后綴的數(shù)據(jù)庫的名稱上下文默認情況下。 若要指定一個不同,使用-Context?
[-StartupProject <String>]:指定要使用的啟動項目。如果省略,則使用解決方案的啟動項目?
[-Environment <String>]?
[<CommonParameters>]?

  • 6.工作原理

反向工程開始時讀取數(shù)據(jù)庫架構(gòu)。 它將讀取有關(guān)表、 列、 約束和索引的信息。?
接下來,它使用的架構(gòu)信息創(chuàng)建 EF Core 模型。 使用表來創(chuàng)建實體類型;使用列來創(chuàng)建屬性;和外鍵用于創(chuàng)建關(guān)系。?
最后,該模型用于生成代碼。 相應(yīng)的實體類型的類、 Fluent API 和數(shù)據(jù)批注已搭建基架以重新創(chuàng)建相同的模型從您的應(yīng)用程序中。?

  • 7.無效情況?

有關(guān)的信息繼承層次結(jié)構(gòu),固有類型,并表拆分數(shù)據(jù)庫架構(gòu)中不存在?
些列類型可能不支持通過 EF Core 提供程序?
表沒有主鍵是當(dāng)前不實施反向工程。?

  • 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.在程序包包管理器控制臺 中執(zhí)行以下語句生成 實體類?

--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指令已經(jīng)可以自動映射數(shù)據(jù)庫中的視圖為實體。查詢類型表示可從數(shù)據(jù)庫讀取但無法更新的數(shù)據(jù),它已重命名為無鍵實體類型。?
由于它們非常適用于映射多數(shù)場景中的數(shù)據(jù)庫視圖,當(dāng)執(zhí)行數(shù)據(jù)庫視圖反向工程時,EF Core 現(xiàn)在將自動創(chuàng)建無鍵實體類型。

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

原文鏈接:https://www.cnblogs.com/springsnow/p/13405231.html

欄目分類
最近更新