為EF Core數據種子創建一個dotnet工具

asp.net-core dotnet-cli entity-framework-core

在本提到的職位 ,我上的ASP.NET核心項目的啟動播種數據庫中的數據如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {

  using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope()) {  
    var context = serviceScope.ServiceProvider.GetService<MyContext>();       
    context.Database.Migrate();
    context.EnsureSeedData();

  }

}

但同一篇文章還建議手動播種數據,

請注意,一般情況下,建議手動應用這些操作(而不是在啟動時自動執行遷移和播種),以避免在有多個服務器時出現競爭條件,以及無意的更改。

我更喜歡和使用dotnet工具如下:

dotnet seed -c <Context> -s <SeedData>

哪裡:
- Context是要使用的DbContext。如果未指定,則使用默認值。
- SeedData是一個包含數據插入邏輯的類。

是否可以創建這樣的自定義dotnet工具?

可以在工具中使用DbContext嗎?

一般承認的答案

創建一個加載項目程序集的通用dotnet CLI工具並dotnet

您可以開始在aspnet / EntityFramework.Toolsaspnet / EntityFramework存儲庫中進行挖掘。一般流程是:

  1. dotnet調用dotnet-ef.dll
  2. dotnet-ef通過MSBuild收集有關項目的信息(例如目標框架和運行時架構)並調用ef.exe (或dotnet ef.dll
  3. ef.exe加載Microsoft.EntityFrameworkCore.Design.dll和項目程序集(在AppDomain或通過Reflection)並調用OperationExecutor
  4. Microsoft.EntityFrameworkCore.Design實例化DbContext並對其執行操作。

通過使您的工具不那麼通用並且更具體到您的項目,您可以大大簡化這一過程。更進一步,只需製作一個控制台應用程序而不是一個dotnet工具。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因