Entity Framework Core 工具參考 - 封裝管理員 Visual Studio 中的主控台

Entity Framework Core 的 封裝管理員 主控台 (PMC) 工具會執行設計階段開發工作。 例如,他們會建立 移轉 、套用移轉,並根據現有的資料庫為模型產生程式碼。 命令會使用 封裝管理員 主控台 在 Visual Studio 內執行。 這些工具會使用 .NET Framework 和 .NET Core 專案。

如果您未使用 Visual Studio,建議您改用 EF Core 命令列工具 。 .NET Core CLI 工具是跨平臺,並在命令提示字元內執行。

安裝工具

在 封裝管理員 主控台中 執行下列命令,以安裝 封裝管理員 主控台 工具:

Install-Package Microsoft.EntityFrameworkCore.Tools

在 封裝管理員主控台 執行下列命令,以更新工具。

Update-Package Microsoft.EntityFrameworkCore.Tools

驗證安裝

執行此命令來確認工具是否已安裝:

Get-Help about_EntityFrameworkCore

輸出看起來像這樣(它不會告訴您所使用的工具版本):


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

TOPIC
    about_EntityFrameworkCore

SHORT DESCRIPTION
    Provides information about the Entity Framework Core Package Manager Console Tools.

<A list of available commands follows, omitted here.>

使用工具

使用工具之前:

  • 瞭解目標與啟動專案之間的差異。
  • 瞭解如何搭配 .NET Standard 類別庫使用工具。
  • 針對 ASP.NET Core 專案,設定環境。

目標和啟動專案

命令會參考 專案 啟始專案

  • 專案 也稱為 目標專案 ,因為它是命令新增或移除檔案的位置。 根據預設, 封裝管理員主控台 選取的預設專案 是目標專案。 您可以使用 參數,將不同的專案指定為目標專案 -Project

  • 啟動 專案 是工具建置和執行的專案。 這些工具必須于設計階段執行應用程式程式碼,才能取得專案的相關資訊,例如資料庫連接字串和模型的組態。 根據預設, 方案總管 中的 啟始專案 是啟始專案。 您可以使用 參數,將不同的專案指定為啟始專案 -StartupProject

啟動專案和目標專案通常是相同的專案。 其為個別專案的一般案例是下列情況:

  • EF Core 內容和實體類別位於 .NET Core 類別庫中。
  • .NET Core 主控台應用程式或 Web 應用程式會參考類別庫。

您也可以將 移轉程式碼放在與 EF Core 內容 分開的類別庫中。

其他目標架構

封裝管理員主控台工具會使用 .NET Core 或 .NET Framework 專案。 在 .NET Standard 類別庫中具有 EF Core 模型的應用程式可能沒有 .NET Core 或 .NET Framework 專案。 例如,這是 Xamarin 和 通用 Windows 平臺 應用程式。 在這種情況下,您可以建立 .NET Core 或 .NET Framework 主控台應用程式專案,其唯一目的是做為工具的啟動專案。 專案可以是沒有實際程式碼的虛擬專案,只需要提供工具的目標。

為什麼需要虛擬專案? 如先前所述,工具必須于設計階段執行應用程式程式碼。 若要這樣做,他們需要使用 .NET Core 或 .NET Framework 執行時間。 當 EF Core 模型位於以 .NET Core 或 .NET Framework 為目標的專案時,EF Core 工具會從專案借用執行時間。 如果 EF Core 模型位於 .NET Standard 類別庫,則無法這麼做。 .NET Standard 不是實際的 .NET 實作;它是一組 .NET 實作必須支援的 API 規格。 因此,.NET Standard 不足以讓 EF Core 工具執行應用程式程式碼。 您建立做為啟始專案的虛擬專案提供可載入 .NET Standard 類別庫的具體目標平臺。

ASP.NET Core 環境

您可以在命令列上指定 ASP.NET Core 專案的環境 。 這個和任何其他引數會傳遞至 Program.CreateHostBuilder。

Update-Database -Args '--environment Production'

Common parameters

下表顯示所有 EF Core 命令通用的參數:

參數 描述
-Context <String> 要使用的 DbContext 類別。 僅限類別名稱或具有命名空間的完整名稱。 如果省略此參數,EF Core 會尋找內容類別別。 如果有多個內容類別別,則需要此參數。
-Project <String> 目標專案。 如果省略此參數, 則會使用 封裝管理員 Console 的預設 專案 作為目標專案。
-StartupProject <String> 啟動專案。 如果省略此參數, [方案] 屬性 中的 [啟動] 專案 會當做目標專案使用。
-Args <String> 傳遞至應用程式的引數。
-Verbose 顯示詳細資訊輸出。

若要顯示命令的說明資訊,請使用 PowerShell 的 Get-Help 命令。

提示

ContextProjectStartupProject 參數支援索引標籤展開。

新增移轉

新增移轉。

參數:

參數 描述
-Name <String> 移轉的名稱。 這是位置參數,而且是必要的。
-OutputDir <String> 目錄會使用 來輸出檔案。 路徑相對於目標專案目錄。 預設為 「移轉」。
-Namespace <String> 要用於所產生類別的命名空間。 預設為從輸出目錄產生。

上面 列出常見的參數

Bundle-Migration

建立可執行檔以更新資料庫。

參數:

參數 描述
-Output <String> 要建立之可執行檔的路徑。
-Force 覆寫現有檔案。
-SelfContained 此外,也會將 .NET 執行時間組合在一起,因此不需要安裝在機器上。
-TargetRuntime <String> 要配套的目標執行時間。
-Framework <String> 目標架構。 預設為專案中的第一個 。

上面 列出常見的參數

Drop-Database

卸載資料庫。

參數:

參數 描述
-WhatIf 顯示要卸載的資料庫,但不要卸載。

上面 列出常見的參數

Get-DbCoNtext

列出並取得可用 DbContext 類型的相關資訊。

上面 列出常見的參數

Get-Migration

列出可用的移轉。

參數:

參數 描述
-Connection <String> 資料庫的連接字串。 預設為 AddDbCoNtext 或 OnConfiguring 中指定的 。
-NoConnect 請勿連線到資料庫。

上面 列出常見的參數

Optimize-DbCoNtext

產生 所 DbContext 使用之模型的編譯版本。

如需詳細資訊,請參閱 編譯的模型

參數:

參數 描述
-OutputDir <String> 要放入檔案的目錄。 路徑相對於專案目錄。
-Namespace <String> 要用於所有產生的類別的命名空間。 預設為從根命名空間和輸出目錄加上 CompiledModels 產生的 。

上面 列出常見的參數

下列範例會使用預設值,如果專案中只有一個 DbContext ,則適用:

Optimize-DbContext

下列範例會針對具有指定名稱的內容優化模型,並將它放在個別的資料夾和命名空間中:

Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext

移除移轉

移除最後一次移轉(復原針對移轉所做的程式碼變更)。

參數:

參數 描述
-Force 還原移轉(回復套用至資料庫的變更)。

上面 列出常見的參數

Scaffold-DbCoNtext

為資料庫產生 和 實體類型的程式碼 DbContext 。 若要 Scaffold-DbContext 產生實體類型,資料庫資料表必須具有主鍵。

參數:

參數 描述
-Connection <String> 資料庫的連接字串。 針對 ASP.NET Core 2.x 專案,此值可以是 name= < name of 連接字串 > 。 在此情況下,名稱來自為專案設定的組態來源。 這是位置參數,而且是必要的。
-Provider <String> 要使用的提供者。 一般而言,這是 NuGet 套件的名稱,例如: Microsoft.EntityFrameworkCore.SqlServer 。 這是位置參數,而且是必要的。
-OutputDir <String> 要放置實體類別檔案的目錄。 路徑相對於專案目錄。
-ContextDir <String> 要放入檔案的 DbContext 目錄。 路徑相對於專案目錄。
-Namespace <String> 要用於所有產生的類別的命名空間。 預設為從根命名空間和輸出目錄產生。
-ContextNamespace <String> 要用於所 DbContext 產生類別的命名空間。 注意:覆寫 -Namespace
-Context <String> 要產生之 DbContext 類別的名稱。
-Schemas <String[]> 要為其產生實體類型的資料表和檢視的架構。 如果省略此參數,則會包含所有架構。 如果使用此選項,則即使未使用 -Table 明確包含架構中的所有資料表和檢視,也會包含在模型中。
-Tables <String[]> 要為其產生實體類型的資料表和檢視表。 特定架構中的資料表或檢視表可以使用 'schema.table' 或 'schema.view' 格式來包含。 如果省略此參數,則會包含所有資料表和檢視表。
-DataAnnotations 使用屬性來設定模型(可能的話)。 如果省略此參數,則只會使用 Fluent API。
-UseDatabaseNames 使用資料表、檢視、序列和資料行名稱,與資料庫中顯示的名稱完全相同。 如果省略此參數,資料庫名稱會變更為更符合 C# 名稱樣式慣例。
-Force 覆寫現有檔案。
-NoOnConfiguring 不要產生 DbContext.OnConfiguring
-NoPluralize 請勿使用複數化程式。

上面 列出常見的參數

範例:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

範例只會建立選取的資料表,並在具有指定名稱和命名空間的個別資料夾中建立內容:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace

下列範例會從可能使用 Secret Manager 工具 設定的專案組態讀取連接字串。

Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer

Script-DbCoNtext

從 DbCoNtext 產生 SQL 腳本。 略過任何移轉。

參數:

參數 描述
-Output <String> 要寫入結果的檔案。

上面 列出常見的參數

Script-Migration

產生 SQL 腳本,將所有變更從一個選取的移轉套用至另一個選取的移轉。

參數:

參數 描述
-From <String> 開始移轉。 移轉可以依名稱或識別碼來識別。 數位 0 是特殊案例,表示 在第一次移 轉之前。 預設為 0。
-To <String> 結束移轉。 預設為上次移轉。
-Idempotent 產生可在任何移轉時在資料庫上使用的腳本。
-NoTransactions 請勿產生 SQL 交易語句。
-Output <String> 要寫入結果的檔案。 如果省略此參數,則會在與應用程式執行時間檔案建立相同的資料夾中,以產生的名稱建立檔案,例如: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/

上面 列出常見的參數

提示

ToFromOutput 參數支援索引標籤展開。

下列範例會使用移轉名稱,建立 InitialCreate 移轉的腳本(從不含任何移轉的資料庫)。

Script-Migration 0 InitialCreate

下列範例會使用移轉識別碼,在 InitialCreate 移轉之後建立所有移轉的腳本。

Script-Migration 20180904195021_InitialCreate

Update-Database

更新資料庫到最後一次移轉或指定的移轉。

參數 描述
-Migration <String> 目標移轉。 移轉可以依名稱或識別碼來識別。 數位 0 是特殊案例,表示 在第一次移 轉之前,並導致所有移轉都還原。 如果未指定任何移轉,命令會預設為上次移轉。
-Connection <String> 資料庫的連接字串。 預設為 或 OnConfiguring 中指定的 AddDbContext

上面 列出常見的參數

提示

參數 Migration 支援 Tab-expansion。

下列範例會還原所有移轉。

Update-Database 0

下列範例會將資料庫更新為指定的移轉。 第一個使用移轉名稱,第二個使用移轉識別碼和指定的連線:

Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string

其他資源