所以我想以编程方式使用迁移,为此我做了类似的事情 .
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 回答
您可以在
Startup.cs
中使用Database.Migrate()
方法 .为此,您可以像这样使用
startup.cs
中的数据库上下文