我正在使用EF7玩ASP.NET 5项目。我已经创建了基本的测试模型,进行了代码优先迁移,数据库更新,现在我尝试将一些数据发送到创建的数据库。
我正在使用项目tepmplates附带的默认DbContext(ApplicationDbContext.cs)。当我试图用控制器发送数据时,一切正常。现在我想在启动时播种数据库。为此,我已经为 ApplicationDbContext :
创建了种子扩展方法public static class ProjectExtensions
{
public static void SeedDB(this ApplicationDbContext context)
{
context.Add(new TestingModel() { Name = "foo" });
context.SaveChanges();
}
}
然后,我在配置方法中添加了 Startup.cs 内的方法调用:
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
using (var context = new ApplicationDbContext())
{
context.SeedDB();
}
}
但是当我尝试运行项目时,系统会抛出异常:
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.Core.dll but was not handled in user code
Additional information: No database providers are configured. Configure a database provider by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services.
看起来很奇怪,因为数据库提供程序应该已经配置好了。正如我所说,我使用默认设置的默认上下文。当我打电话给控制器进行一些CRUD操作时,一切正常。
有谁知道,哪里出错?
答案 0 :(得分:0)
找到解决方案。在配置方法中 Startup.cs 内的此修改似乎解决了所有问题:
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<ApplicationDbContext>().Database.Migrate();
serviceScope.ServiceProvider.GetService<ApplicationDbContext>().SeedDB();
}
}
希望这可以帮助有同样问题的人:)