如何在项目启动时执行迁移

时间:2016-09-02 00:02:43

标签: c# ef-migrations

我希望在start.cs文件中执行一个迁移命令。 因此,当应用程序首次运行时,它会查找数据库,如果它不存在,则会运行迁移脚本。

我知道您可以使用“dotnet迁移”在包管理器控制台中执行此操作,但我希望通过代码执行此操作。

谢谢!

更新

看起来这对我有用

  • 在我的Startup.cs文件中,在Startup构造函数方法中。

       using (
            var context = new PeopleContext(
                _config,
                new Microsoft.EntityFrameworkCore.DbContextOptions<PeopleContext>()
            ))
        {
            context.Database.EnsureCreated();
        }
    
  • 我在这里使用“using”语句,以确保在完成后我的DbContext关闭。

  • 创建上下文后,我调用其方法以确保DataBase在那里,如果没有,则添加dataBase并运行迁移。

我正在使用ASP.NET Core:NETStandard,Version = v1.6

截至2016年9月1日的最新报道

更新2

看起来使用.Migrate()方法可能就是这样。

注意*

要使用.Migrate(),您需要添加

using Microsoft.EntityFrameworkCore;

以下是我现在使用的内容。

        using (var context = new PeopleContext(_config,new Microsoft.EntityFrameworkCore.DbContextOptions<PeopleContext>()))
        {
            try
            {
                context.Person.Any();
            }
            catch (Exception ex)
            {
                //context.Database.EnsureCreated();
                context.Database.Migrate();
            }

        }

1 个答案:

答案 0 :(得分:3)

要在.Net Core的应用程序启动时运行EF7 Migrations,我有:

在ConfigureServices()

using (var dataContext = (DataContext)app.ApplicationServices.GetService(typeof(DataContext)))
            {
                dataContext.Database.Migrate();
            }

这会在启动时运行新的迁移。

我不确定EnsureCreated会在创建初始表后运行新的迁移吗? 见:http://thedatafarm.com/data-access/ef7-ensurecreated-vs-migrate-methods/