浏览实体框架迁移选项



我正在努力找出在生产环境中迁移数据库的最佳方法,但我认为我混淆了一些术语。

我有一个名为"迁移"的类,我用它来为数据库种子。它的构造函数看起来是这样的(我的DbContext被称为SiteDatabase):

internal sealed class Migration : DbMigrationsConfiguration<SiteDatabase>
{
    public Migration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}
  1. 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>());
}
  1. 这些是唯一可用的选项吗
  2. 这与Migration类中的AutomaticMigrationsEnabled有何关联

在Package Manager控制台中,我了解以下命令:

> update-database
> add-migration
  1. 更新数据库与AutomaticMigrationsEnabled有何关联?还需要吗?创建新的DbMigrator时该怎么办
  2. 如果我使用添加迁移创建迁移,那么命名它们的好方法是什么?我知道它们是用时间戳自动命名的,但也需要附加一个额外的字符串
  3. 有没有一种方法可以控制添加迁移生成的文件的命名方式

AutomaticMigrationsEnabled在这里做什么?这就是我启用自动迁移的方式吗?

显然:是的。这样做的效果是,在调用update-database之前,您不必执行add-migration:它将为您生成一个只带有名称时间戳的迁移。您将无法在"迁移"文件夹中找到此迁移。

这些是唯一可用的选项吗?

不,还有更多类似CreateDatabaseIfNotExistsDropCreateDatabaseWhenModelChangesDropCreateDatabaseAlways和您自己创建的自定义。

这与Migration类中的AutomaticMigrationsEnabled有何关联?

自动迁移只会确保您不再需要自己执行,从而使表的迁移过程更容易。数据库初始化器决定如何处理数据库本身。它们是不同的方面,但以它们在数据库中工作的方式连接在一起。

更新数据库与AutomaticMigrationsEnabled有何关联?还需要吗?创建新的DbMigrator时该怎么办?

如上所述:您基本上不必再调用add-migration了。

如果我使用添加迁移创建迁移,那么命名它们的好方法是什么?

我不知道有什么指导方针,但我只是总结一下更改的内容。例如"添加用户模型地址",为我的用户添加地址字段。这真的取决于你来决定什么最有效。

有没有一种方法可以控制添加迁移生成的文件的命名方式?

我不知道有这样的选择。

最新更新