如何在Entity Framework Core中以编程方式使用迁移

时间:2018-10-02 11:20:12

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

所以我想以编程方式使用迁移,为此,我已经做了类似的事情。

种子是我通过StoreContext创建的扩展方法

StoreContext是我的DbContext

 internal StoreContext(DbContextOptions options)
            : base(options)
        {
            RelationalDatabaseCreator creator = this.GetService<IDatabaseCreator>() as RelationalDatabaseCreator;

            if (!creator.Exists())
            {
                creator.Create(); ///=> create database
                creator.CreateTables(); ///=> create database tables
            }

            Database.Migrate(); ///=> apply migrations

            if (creator.Exists())
            {
                this.Seed(); 
            }
        }

如果数据库不存在,则运行

  

添加迁移初始

一切都很好(这仅适用于我的首次迁移)

如果我决定添加新的迁移

  

添加迁移Add_Student_FirstName

学生中的一个新字段,然后我收到此PMC异常

  

数据库中已经有一个名为“ SomeTableName”的对象。

控制台抱怨的SomeTableName不一定是我添加了更改的表。

但是,如果我进入代码并对

行进行注释
 Database.Migrate(); ///=> apply migrations

然后再次运行

  

添加迁移Add_Student_FirstName

一切都很好(我的迁移已添加到“迁移”文件夹中,但是我仍然必须使用

手动进行迁移)
  

更新数据库

命令)

那么我在做什么错了,我应该如何解决这个问题,以便在创建迁移时自动应用迁移?

谢谢

1 个答案:

答案 0 :(得分:-1)

您可以在Database.Migrate()中使用Startup.cs方法。

为此,您可以像这样在startup.cs中使用数据库上下文

using (var dbContext = new DbContext(...))
{
    dbContext.Database.Migrate();
}