共用方式為


Entity Framework Core MSBuild 整合

從 EF 9 開始,您可以使用 MSBuild 工作,在建置專案或發佈專案時自動產生已編譯的模型和先行編譯查詢。 這主要是要與 NativeAOT 發行搭配使用。

警告

NativeAOT 支援和 MSBuild 整合是實驗性功能,還不適合生產環境使用。

安裝工作

若要開始使用,請安裝 Microsoft.EntityFrameworkCore.Tasks NuGet 套件。 例如:

dotnet add package Microsoft.EntityFrameworkCore.Tasks

注意

需要以產生的檔案編譯的每個 專案都應該參考 NuGet 套件,它預設不會轉移。

使用工作

如果專案指定 <PublishAot>true</PublishAot> ,則根據預設,MSBuild 工作會在發佈期間產生已編譯的模型和先行編譯查詢。 否則,您可以設定下列屬性來控制產生行為:

MSBuild 屬性 描述
EFOptimizeContext 設定為 以 true 啟用 MSBuild 整合。
EFScaffoldModelStage 將 設定為 publishbuildnone 表示將產生編譯的模型階段。 預設為 publish
EFPrecompileQueriesStage 將 設定為 publishbuildnone 表示將產生先行編譯查詢的階段。 預設為 publish
DbContextName 要使用的衍生 DbContext 類別。 僅限類別名稱,或具有命名空間的完全合格名稱。 如果省略此選項,EF Core 會針對專案中的所有內容類別執行產生。
EFTargetNamespace 用於所有產生的類別的命名空間。 如果省略此選項,EF Core 將會使用 $(RootNamespace)
EFOutputDir 在編譯專案之前放置所產生檔案的資料夾。 如果省略此選項,EF Core 將會使用 $(IntermediateOutputPath)
EFNullable 產生的程式代碼中是否會使用可為 Null 的參考型別。 如果省略此選項,EF Core 將會使用 $(Nullable)

限制

  • publish 階段進行整合時,請在啟動專案中設定 rid(例如,<RuntimeIdentifier>win-x64</RuntimeIdentifier>)
  • 使用此方法時,無法指定不同的啟動專案,因為它會引進反向建置相依性。 這表示內容項目在設定方面必須自動使用,因此,如果您的應用程式通常會在不同的專案中使用主機產生器來設定內容,則必須在內容專案中實>
  • 由於在產生編譯的模型之前,必須編譯專案,此方法不支援部分方法實作來自定義已編譯的模型。
  • 目前,這一律會在 NativeAOT 所需的已編譯模型中產生額外的程式代碼。 如果您不打算啟用 NativeAOT,請使用 CLI 工具產生已編譯的模型。

其他資源