首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导航实体框架迁移选项

导航实体框架迁移选项
EN

Stack Overflow用户
提问于 2015-04-09 17:14:53
回答 1查看 78关注 0票数 4

我正在努力找出在我的生产环境中迁移我的数据库的最佳方法,我想我把一些术语弄糊涂了。

我有一个名为“迁移”的类,我用它作为我的数据库的种子。它的构造函数如下(我的DbContext称为SiteDatabase):

代码语言:javascript
复制
internal sealed class Migration : DbMigrationsConfiguration<SiteDatabase>
{
    public Migration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}
  1. AutomaticMigrationsEnabled在这里做什么?我就是这样启用自动迁移的吗?

在我的'Application_Start()‘方法中,我看到添加了以下条目:

代码语言:javascript
复制
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. 这与迁移类中的AutomaticMigrationsEnabled有什么关系?

在Package控制台中,我知道以下命令:

代码语言:javascript
复制
> update-database
> add-migration
  1. 更新数据库与AutomaticMigrationsEnabled的关系如何?还需要吗?那么当您创建一个新的DbMigrator时呢?
  2. 如果我使用附加迁移创建迁移,那么有什么好的方法来命名它们呢?我知道它们是自动用时间戳命名的,但它还需要附加一个额外的字符串。
  3. 是否有一种方法来控制通过添加迁移生成的文件是如何命名的?
EN

回答 1

Stack Overflow用户

发布于 2015-04-09 17:33:10

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

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

这些是唯一的选择吗?

不,还有更多,比如CreateDatabaseIfNotExistsDropCreateDatabaseWhenModelChangesDropCreateDatabaseAlways,还有你自己创造的定制的。

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

自动迁移确保不再需要自己执行,从而简化了表的迁移过程。数据库初始化程序决定如何处理数据库本身。它们是不同的方面,但它们在数据库上的工作方式是相互关联的。

更新数据库与AutomaticMigrationsEnabled的关系如何?还需要吗?那么当您创建一个新的DbMigrator时呢?

参见上面:您基本上不需要再调用add-migration了。

如果我使用附加迁移创建迁移,那么有什么好的方法来命名它们呢?

我不知道任何指南,但我只是总结了变化的内容。例如,“添加用户模型地址”将地址字段添加到我的用户。这真的取决于你来决定什么是最有效的。

是否有一种方法来控制通过添加迁移生成的文件是如何命名的?

我不知道有这样的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29544891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档