我使用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();
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<AppDbContextSeed>();
}
program.cs
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
中的数据插入数据库。我做错了什么?
答案 0 :(得分:0)
您将种子执行放在仅在应用程序启动时运行的Main
方法上。如果希望在执行update-database
命令的同时执行种子方法,则需要遵循EF Core 2.1中的数据种子新功能。该功能为实体配置HasData
添加了新方法,可让您添加一些初始数据。
这是Data Seeding功能文档的摘录:
数据播种允许提供初始数据以填充数据库。 与EF6中不同,在EF Core中,种子数据与实体相关联 类型作为模型配置的一部分。然后,EF Core迁移可以 自动计算需要执行哪些插入,更新或删除操作 在将数据库升级到模型的新版本时应用。
我建议您阅读文档以了解如何使用该新功能。