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
命令。
提示
Context
、 Project
和 StartupProject
參數支援索引標籤展開。
新增移轉
新增移轉。
參數:
參數 | 描述 |
---|---|
-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/ 。 |
上面 列出常見的參數 。
提示
To
、 From
和 Output
參數支援索引標籤展開。
下列範例會使用移轉名稱,建立 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