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

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

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

安裝工具

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

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專案的環境,請在執行命令之前設定env:ASPNETCORE_ENVIRONMENT

從 EF Core 5.0 開始,其他引數也可以傳入 Program.CreateHostBuilder,讓您在命令列上指定環境:

Update-Database -Args '--environment Production'

一般參數

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

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

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

秘訣

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

Add-Migration

新增移轉。

參數:

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

上述一般參數會列出。

Bundle-Migration

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

參數:

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

上述一般參數會列出。

Drop-Database

卸除資料庫。

參數:

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

上述 會列出通用參數

Get-DbContext

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

上述 會列出通用參數

Get-Migration

列出可用的移轉。 已在 EF Core 5.0 中新增。

參數:

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

上述 會列出通用參數

Optimize-DbContext

產生 所使用的 DbContext 已編譯模型版本。 已在 EF Core 6 中新增。

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

參數:

參數 描述
-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 專案,此值可以是連接字串 > 的名稱= < 名稱。 在此情況下,名稱來自為專案設定的組態來源。 這是位置參數,而且是必要的。
-Provider <String> 要使用的提供者。 這通常是 NuGet 套件的名稱,例如: Microsoft.EntityFrameworkCore.SqlServer 。 這是位置參數,而且是必要的。
-OutputDir <String> 要放入實體類別檔案的目錄。 路徑相對於專案目錄。
-ContextDir <String> 要放入檔案的 DbContext 目錄。 路徑相對於專案目錄。
-Namespace <String> 要用於所有所產生類別的命名空間。 預設為從根命名空間和輸出目錄產生。 已在 EF Core 5.0 中新增。
-ContextNamespace <String> 要用於所產生 DbContext 類別的命名空間。 注意:覆 -Namespace 寫 。 已在 EF Core 5.0 中新增。
-Context <String> 要產生之 DbContext 類別的名稱。
-Schemas <String[]> 要為其產生實體類型的資料表架構。 如果省略此參數,則會包含所有架構。
-Tables <String[]> 要為其產生實體類型的資料表。 如果省略此參數,則會包含所有資料表。
-DataAnnotations 使用屬性來設定模型, (盡可能) 。 如果省略此參數,則只會使用 Fluent API。
-UseDatabaseNames 使用資料表和資料行名稱,就像它們出現在資料庫中一樣。 如果省略此參數,資料庫名稱會變更為更符合 C# 名稱樣式慣例。
-Force 覆寫現有檔案。
-NoOnConfiguring 不要產生 DbContext.OnConfiguring 。 已在 EF Core 5.0 中新增。
-NoPluralize 請勿使用複數化程式。 已在 EF Core 5.0 中新增。

上述 會列出通用參數

範例:

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

下列範例會從可能使用 秘密管理員工具設定的專案組態讀取連接字串。

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 交易語句。 已在 EF Core 5.0 中新增。
-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 。 已在 EF Core 5.0 中新增。

上述 會列出通用參數

秘訣

參數 Migration 支援 tab-expansion。

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

Update-Database 0

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

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

其他資源