[英]Entity Framework Core run seed
我使用EF Core創建AppDBContext
和AppDbContextSeed
:
AppDbContextSeed
public class AppDbContextSeed
{
private readonly AppDbContext _dbContext;
private UserManager<AppUser> _userManager;
private RoleManager<AppRole> _roleManager;
public AppDbContextSeed(AppDbContext dbContext, UserManager<AppUser> userManager,
RoleManager<AppRole> roleManager)
{
_dbContext = dbContext;
}
public async Task Seed()
{
...
await _dbContext.SaveChangesAsync();
}
}
啟動文件
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<AppDbContextSeed>();
}
程式
public static void Main(string[] args)
{
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var appDbContextSeed = services.GetService<AppDbContextSeed>();
appDbContextSeed.Seed().Wait();
}
catch (Exception ex)
{
var logger = services.GetService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database");
}
}
host.Run();
}
當我運行add-migration
和update-database
,沒有appDbContextSeed
數據插入數據庫。 我做錯了什么?
您可以將種子執行放在Main
方法上,而Main
方法僅在應用程序啟動時運行。 如果希望在執行update-database
命令的同時執行種子方法,則需要遵循EF Core 2.1中的數據播種新功能。 該功能為實體配置HasData
添加了新方法,可讓您添加一些初始數據。
這是“ 數據種子”功能文檔的摘錄:
數據播種允許提供初始數據以填充數據庫。 與EF6中不同,在EF Core中,種子數據與實體類型相關聯,作為模型配置的一部分。 然后,當將數據庫升級到模型的新版本時,EF Core遷移可以自動計算需要應用哪些插入,更新或刪除操作。
我建議您閱讀文檔以了解使用該新功能的知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.