共用方式為


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產生的 。

上面 列出常見的參數

注意

PMC 工具目前不支援產生 NativeAOT 編譯和先行編譯查詢所需的程式代碼。

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

Optimize-DbContext

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

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

移除移轉

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

參數:

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

上面 列出常見的參數

Scaffold-DbContext

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

參數:

參數 描述
-Connection <String> 資料庫的連接字串。 此值可以是 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

下列範例會使用 Configuration 讀取 連接字串。

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

其他資源