带有实体框架7的ASP.NET 5 - 尝试种子数据库时没有配置数据库提供程序

时间:2016-02-29 14:28:34

标签: asp.net asp.net-mvc entity-framework web-applications

我正在使用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操作时,一切正常。

有谁知道,哪里出错?

1 个答案:

答案 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();
            }

        }

希望这可以帮助有同样问题的人:)