导航实体框架迁移选项

时间:2015-04-09 17:14:53

标签: c# entity-framework

我正在尝试找出在我的生产环境中迁移数据库的最佳方法,我认为我的一些术语很混乱。

我有一个名为" Migration"我用它来种子数据库。它的构造函数看起来像这样(我的DbContext称为SiteDatabase):

internal sealed class Migration : DbMigrationsConfiguration<SiteDatabase>
{
    public Migration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}
  1. AutomaticMigrationsEnabled在这做什么?这是我启用自动迁移的方式吗?
  2. 在我的&#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>());
    }
    
    1. 这些是唯一可用的选项吗?
    2. 这与Migration类中的AutomaticMigrationsEnabled有什么关系?
    3. 在软件包管理器控制台中,我了解以下命令:

      > update-database
      > add-migration
      
      1. update-database如何与AutomaticMigrationsEnabled相关?它还需要吗?什么时候创建一个新的DbMigrator?
      2. 如果我使用add-migration创建迁移,那么命名它们的好方法是什么?我知道它们会自动以时间戳命名,但它还需要附加一个字符串才能附加到它。
      3. 有没有办法控制使用add-migration生成的文件的命名方式?

1 个答案:

答案 0 :(得分:2)

  

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

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

  

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

不,there are more,例如CreateDatabaseIfNotExistsDropCreateDatabaseWhenModelChangesDropCreateDatabaseAlways以及您自己制作的自定义内容。

  

这与Migration类中的AutomaticMigrationsEnabled有什么关系?

通过确保您不必再自己执行自动迁移,可以简化表的迁移过程。数据库初始化程序决定如何处理数据库本身。它们是截然不同的方面,但它们都与数据库相关联。

  

update-database如何与AutomaticMigrationsEnabled相关?它还需要吗?什么时候创建一个新的DbMigrator?

见上文:你基本上不必再打电话给add-migration了。

  

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

我不知道任何指导方针,但我只是总结了改变的内容。例如,“添加用户模型地址”以向我的用户添加地址字段。这取决于你决定哪种方法最有效。

  

有没有办法控制使用add-migration生成的文件的命名方式?

我不知道这样的选择。

相关问题