我的问题是我正在尝试使用数据填充实体框架核心数据库,我认为下面的代码应该可以工作。我意识到这不应该在ApplicationDbContext
构造函数中调用,而应该从startup
中调用,但我不知道如何做。
编辑:根据Ketrex提供的解决方案,我的解决方案如下:
Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.ApplicationServices.GetRequiredService<ApplicationDbContext>().Seed();
}
种子扩展:
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 = "France", Code = "Fr" }
);
}
...
}
我知道在Entity Framework中,填充数据库非常重要,但如果有一些关于如何完成这个琐碎任务的文档或者至少提供一个临时性的解决方案就太好了。如果有人能够提供如何实现此功能的指导,我将不胜感激。我觉得我离解决方案很近,只是无法拼凑在一起。
谢谢任何帮助。
app.ApplicationServices.GetRequiredService<ApplicationDbContext>()
。我稍作修改,将其用作扩展方法。 - Adam Hpublic static IApplicationBuilder Seed(this IApplicationBuilder app)
,這樣我的啟動就可以只使用app.seed();
。 - Brian Webb