我正在努力找出在生产环境中迁移数据库的最佳方法,但我认为我混淆了一些术语。
我有一个名为"迁移"的类,我用它来为数据库种子。它的构造函数看起来是这样的(我的DbContext被称为SiteDatabase):
internal sealed class Migration : DbMigrationsConfiguration<SiteDatabase>
{
public Migration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
- AutomaticMigrationsEnabled在这里做什么?这就是我启用自动迁移的方式吗
在我的"Application_Start()"方法中,我看到添加了以下项目:
protected void Application_Start()
{
new DbMigrator(new Migration()).Update();
// Option 1
Database.SetInitializer(new MigrateDatabaseToLatestVersion<SiteDatabase, Migration>());
// Option 2
Database.SetInitializer(new DropCreateDatabaseAlways<SiteDatabase>());
}
- 这些是唯一可用的选项吗
- 这与Migration类中的AutomaticMigrationsEnabled有何关联
在Package Manager控制台中,我了解以下命令:
> update-database
> add-migration
- 更新数据库与AutomaticMigrationsEnabled有何关联?还需要吗?创建新的DbMigrator时该怎么办
- 如果我使用添加迁移创建迁移,那么命名它们的好方法是什么?我知道它们是用时间戳自动命名的,但也需要附加一个额外的字符串
- 有没有一种方法可以控制添加迁移生成的文件的命名方式
AutomaticMigrationsEnabled在这里做什么?这就是我启用自动迁移的方式吗?
显然:是的。这样做的效果是,在调用update-database
之前,您不必执行add-migration
:它将为您生成一个只带有名称时间戳的迁移。您将无法在"迁移"文件夹中找到此迁移。
这些是唯一可用的选项吗?
不,还有更多类似CreateDatabaseIfNotExists
、DropCreateDatabaseWhenModelChanges
、DropCreateDatabaseAlways
和您自己创建的自定义。
这与Migration类中的AutomaticMigrationsEnabled有何关联?
自动迁移只会确保您不再需要自己执行,从而使表的迁移过程更容易。数据库初始化器决定如何处理数据库本身。它们是不同的方面,但以它们在数据库中工作的方式连接在一起。
更新数据库与AutomaticMigrationsEnabled有何关联?还需要吗?创建新的DbMigrator时该怎么办?
如上所述:您基本上不必再调用add-migration
了。
如果我使用添加迁移创建迁移,那么命名它们的好方法是什么?
我不知道有什么指导方针,但我只是总结一下更改的内容。例如"添加用户模型地址",为我的用户添加地址字段。这真的取决于你来决定什么最有效。
有没有一种方法可以控制添加迁移生成的文件的命名方式?
我不知道有这样的选择。