我已经使用迁移配置了Entity Framework(6.1.1)。我知道可以在Package Manager Console中运行以下命令来将数据库完全重置为空:
但是我如何在我的代码中实现这个功能呢?
Update-Database –TargetMigration: $InitialDatabase
但是我如何在我的代码中实现这个功能呢?
Update-Database –TargetMigration: $InitialDatabase
var configuration = new MyDbConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
"Server=MyServer;Database=MyDatabase;Trusted_Connection=True;",
"System.Data.SqlClient");
var migrator = new DbMigrator(configuration);
migrator.Update("201606030938116_InitialDatabase");
如果您不知道迁移ID,那么可以执行以下操作:
migrator.GetDatabaseMigrations().First();
migrator.GetLocalMigrations().First();
public class MyDbConfiguration: DbMigrationsConfiguration<MyDbContext>
{
public MyDbConfiguration()
{
this.AutomaticMigrationsEnabled = true;
this.AutomaticMigrationDataLossAllowed = true;
}
}
@GTHvidsten更新:
不是获取可用的迁移,而是使用这个命令:migrator.Update(DbMigrator.InitialDatabase);。但你也必须设置MyDbConfiguration中的ContextKey属性,以匹配包管理器创建的Configuration对象中使用的属性。同时满足这两个条件后,我的数据库变为空。
migrator.Update(migrator.GetLocalMigrations().First())
时,会出现错误,指出“数据库中已经存在名为'SomeTable'的对象”。原始迁移配置对象(通过软件包管理器创建)已经为 ContextKey
属性设置了一个值。我尝试在 MyDbConfiguration
中设置相同的值。这样可以消除错误,但在 Update()
调用时什么也不会发生。数据库与之前完全相同。 - GTHvidstenmigrator.Update(DbMigrator.InitialDatabase);
。但是,您还必须将MyDbConfiguration
中的ContextKey
属性设置为与包管理器创建的Configuration对象中使用的属性相匹配。有了这两个条件,我的数据库就变为空了。 - GTHvidsten
DbContext.Database.Delete(); DbContext.Database.Initialize(true);
会删除并重新创建数据库,但不清楚这是否符合你的要求。 - Gusdor