我的问题是我试图用数据种子实体框架核心数据库,在我看来下面的代码显示工作.我已经意识到这不应该在ApplicationDbContext构造函数中调用,应该从中调用,startup但我不知道如何做到这一点.
编辑:根据Ketrex提供的解决方案,我的解决方案如下:
Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.ApplicationServices.GetRequiredService<ApplicationDbContext>().Seed();
}
Run Code Online (Sandbox Code Playgroud)
种子延伸:
public static class DbContextExtensions
{
public static void Seed(this ApplicationDbContext context)
{
// Perform database delete and create
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
// Perform seed operations
AddCountries(context);
AddAreas(context);
AddGrades(context);
AddCrags(context);
AddClimbs(context);
// Save changes and release resources
context.SaveChanges();
context.Dispose();
}
private static void AddCountries(ApplicationDbContext context)
{
context.AddRange(
new Country { Name = "England", Code = "En" },
new Country { Name = …Run Code Online (Sandbox Code Playgroud) 我在过去几个月做了一些版本升级,现在我注意到当我使用"删除迁移"删除我恢复的迁移时,它首先运行我的应用程序.
(我注意到,因为我们在启动时更新数据库,所以我遇到了无法删除迁移的情况,因为每次我尝试删除迁移时 - 它会自动运行启动,将迁移应用到db,然后删除失败它,因为它在db中看到它.)
任何的想法?