发生了重大变化,因此我们决定重置迁移,但现在如果我们不认为-EnableAutomaticMigrations
选项Enable-Migrations
不起作用。
我的连接字符串位于我的Web项目中,该项目被设置为启动项目。
这是我们采取的步骤:
首先我们完全删除了Migrations文件夹和数据库。 然后我们这样做:
enable-migrations
我们得到:
检查上下文是否以现有数据库为目标......
无法更新数据库以匹配当前模型,因为有待处理的数据库 更改和自动迁移已禁用。写入待处理的 模型更改为基于代码的迁移或启用自动迁移。 将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true 启用自动迁移。
我不明白这个错误,没有数据库,没有迁移,它引用了哪些挂起的更改? (我甚至在git中都没有待处理的通道)
如果那么我们
enable-migrations -EnableAutomaticMigrations
它有效,但是当我们遵循它时:
Add-Migration InitialCreation
它创建空InitialCreation迁移,并使用与我的模型对应的表创建数据库。但是这样做我们第一次无法获得用于创建数据库的脚本。我不知道发生了什么。 这似乎是第一次使用一些自动迁移。
为什么我们enable-migrations
没有-EnableAutomaticMigrations
?
更新
在与Steve Green交谈后,我认为添加部分DbContext和Initializer可能很有用
public class ApplicationDatabaseContext : DbContext
{
public ApplicationDatabaseContext()
: base("MyConnectionStringName")
{
Database.SetInitializer<ApplicationDatabaseContext>(new ApplicationDataInitializer());
if (!Database.Exists())
{
Database.Initialize(true);
}
}
我的DatabaseInitializer:
public class ApplicationDataInitializer : CreateDatabaseIfNotExists<ApplicationDatabaseContext>
{
protected override void Seed(ApplicationDatabaseContext context)
{
base.Seed(context);
CreateData(context);
}
private void CreateData(ApplicationDatabaseContext context)
{
//Add data here
context.SaveChanges();
}
}
答案 0 :(得分:0)
首先,确保设置了初始化程序MigrateDatabaseToLatestVersion。
其次,您不需要启用自动迁移。要重置迁移,您不必删除整个文件夹(特别是如果您在Configuration()类中完成了一些种子设定或其他自定义)。只需删除单个迁移,然后添加新的基线迁移:
add-migration MyStartPoint -IgnoreChanges
这将在Up()中创建没有代码的快照,因为您实际上并不需要生成用于创建数据库的脚本。所以现在update-database -Script -SourceMigration $InitialDatabase
应该创建一个可用于创建新数据库的脚本。
另一种选择是使用类似CreateDatabaseIfNotExist的initializer,这样就可以完成。