迁移未被应用

时间:2017-09-16 04:36:10

标签: asp.net-core entity-framework-core ef-migrations

我正在尝试使用Entity Framework Core 2.0以编程方式在代码优先的ASP.Net Core 2.0项目中应用迁移。如果我通过终端手动运行迁移,则会毫无问题地应用它们。在我的Startup类中应用迁移会导致数据库模型永远不会更改。

我这样做错了吗?

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddEntityFrameworkSqlite();
    services.AddDbContext<ApplicationContext>(options => options.UseSqlite("Data Source=blogging.db"));
    services.AddDbContext<UserContext>(options => options.UseSqlite("Data Source=blogging.db"));
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc();
    var services = app.ApplicationServices.GetService<IServiceScopeFactory>();
    var context = services.CreateScope().ServiceProvider.GetRequiredService<ApplicationContext>();
    context.Database.Migrate();
}

我可以从终端运行它,它运行正常:

  

dotnet ef migrations添加FourthMigration --context EFCore_Test.DataAccess.ApplicationContext

我有多种DataContext类型;只有一个代表整个数据模型,其余的只是用于在更多领域特定的庄园中访问数据库。 ApplicationContext代表我的“所有+厨房接收器”数据上下文。我在这个上下文中使用。

执行迁移和更新

在准备部署到Azure时,我希望让web-app随每个部署进行迁移,而不必连接PowerShell脚本来运行dotnet核心工具命令。

1 个答案:

答案 0 :(得分:0)

新的迁移文件未被选中并添加到Visual Studio for macOS中的解决方案资源管理器中。我最初没有想到这一点,因为我认为IDE在引擎盖下使用dotnet build,这将获取迁移文件。我不确定IDE的功能,但是当我使用这些迁移文件构建时,它们不会包含在已编译的程序集中。这会导致应用程序在启动时永远不会迁移。

我在解决方案资源管理器中手动添加了迁移类,然后运行了应用程序并应用了迁移。我通过多次迁移重复了几次,从未遇到过其他问题。