我正在尝试找出在我的生产环境中迁移数据库的最佳方法,我认为我的一些术语很混乱。
我有一个名为" Migration"我用它来种子数据库。它的构造函数看起来像这样(我的DbContext称为SiteDatabase):
internal sealed class Migration : DbMigrationsConfiguration<SiteDatabase>
{
public Migration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
在我的&#39; Application_Start()&#39;方法,我看到添加了以下项目:
protected void Application_Start()
{
new DbMigrator(new Migration()).Update();
// Option 1
Database.SetInitializer(new MigrateDatabaseToLatestVersion<SiteDatabase, Migration>());
// Option 2
Database.SetInitializer(new DropCreateDatabaseAlways<SiteDatabase>());
}
在软件包管理器控制台中,我了解以下命令:
> update-database
> add-migration
答案 0 :(得分:2)
AutomaticMigrationsEnabled在这做什么?这是我启用自动迁移的方式吗?
显然:是的。这样做的结果是您在调用add-migration
之前不必执行update-database
:它将为您生成一个只有名称时间戳的迁移。您将无法在“迁移”文件夹中找到此迁移。
这些是唯一可用的选项吗?
不,there are more,例如CreateDatabaseIfNotExists
,DropCreateDatabaseWhenModelChanges
,DropCreateDatabaseAlways
以及您自己制作的自定义内容。
这与Migration类中的AutomaticMigrationsEnabled有什么关系?
通过确保您不必再自己执行自动迁移,可以简化表的迁移过程。数据库初始化程序决定如何处理数据库本身。它们是截然不同的方面,但它们都与数据库相关联。
update-database如何与AutomaticMigrationsEnabled相关?它还需要吗?什么时候创建一个新的DbMigrator?
见上文:你基本上不必再打电话给add-migration
了。
如果我使用add-migration创建迁移,那么命名它们的好方法是什么?
我不知道任何指导方针,但我只是总结了改变的内容。例如,“添加用户模型地址”以向我的用户添加地址字段。这取决于你决定哪种方法最有效。
有没有办法控制使用add-migration生成的文件的命名方式?
我不知道这样的选择。