首页 文章

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

提问于
浏览
1

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

Seed是我在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-Migration Initial

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

如果我决定添加新的迁移

Add-Migration Add_Student_FirstName

在Student中的一个新字段然后我得到了这个PMC例外

数据库中已存在名为“SomeTableName”的对象 .

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

但是,如果我进入我的代码并评论该行

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

并再次运行

Add-Migration Add_Student_FirstName

一切都很好(我的迁移被添加到Migrations文件夹,但我仍然需要手动进行迁移

更新 - 数据库

命令)

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

谢谢

1 回答

  • 0

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

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

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

相关问题