【问题标题】:EF codefirst migrations how it works in a production environmentEF 代码首先迁移它在生产环境中的工作方式
【发布时间】:2015-01-05 13:26:02
【问题描述】:

我是 Codefirst 的新手,我不明白它是如何正常工作的。 我通过“Add-Migration”命令创建了 3 个迁移,迁移 1..3,并使用“Update Database”发布了相关更新。

我在我的 Migration 目录中有一个 Configuration.cs 文件,我创建了一个自定义数据库初始化程序(我正在使用 MySQL),以便为初始数据提供种子。

我不知道在我还没有任何数据库的生产环境中幕后发生了什么。

谁负责创建和更新数据库?迁移是否一个接一个地执行?

你能建议我这个过程在生产中是如何工作的并分享有用的链接吗?

问候, 罗伯托

【问题讨论】:

  • 生产环境没有db是什么意思?
  • 嗨,我在生产中从头开始,我刚刚部署了包。我认为在第一次调用上下文类时会在幕后调用迁移过程,但是以什么方式?
  • 你应该从你的初始化器中调用CreateIfNotExists函数,或者使用一个完全可以做到这一点的初始化器,我不推荐这样做——这给我带来了很多麻烦。
  • 我认为您要弄清楚的是这种初始化发生的位置/时间 - 我知道所有事情开始的地方是 Global.asax Application_Start 函数。
  • 您好,我调用了 Database.Create,我的问题是了解迁移在连续步骤中的工作方式:迁移 1 到 3 是否作为对 DB 的不同命令按顺序启动?

标签: entity-framework ef-code-first entity-framework-migrations


【解决方案1】:

假设您正在使用Automatic Migrations - 所有迁移都按照创建顺序依次调用。他们的Up 函数被调用。之后,Configuration 类上的 Seed 函数应该会触发。

每个迁移在其文件名中都有一个时间戳,如下所示:

如果您像我一样使用单个上下文类创建大量数据库,并且您害怕无法控制迁移,则可以使用手动迁移。它被称为DbMigrator

查看我/其他人的回答here如何使用它。

【讨论】:

  • 您好,感谢您的解释,如果我将自动迁移设置为 false,那么在非开发/本地环境中的行为是什么?
  • 我并不总是使用Automatic Migrations。在某些数据库中,我使用它,而有些则没有。含义-如果您不使用它,什么都不会发生...如果您像我一样从单个上下文类中创建大量数据库,并且您害怕无法控制迁移,则可以使用手动迁移。它被称为DbMigrator
  • 查看我在答案中添加的链接 - 它显示了手动迁移的选项 - 以便完全控制并且不害怕不需要的迁移和Automatic Migrations 开启时可能发生的事情.
  • 好的,谢谢你的解释,我还有一个很好的问题。我在迁移历史表中发现了一个名为“xxx_xxx_InitialCreate”的条目,这是一种与初始模型相关的默认迁移吗?
  • @RobertoG。 - 我引用:“之所以生成此迁移,是因为在我们启用迁移之前,我们已经让 Code First 为我们创建了一个数据库。” .这是从这里获取的:msdn.microsoft.com/en-us/data/jj591621.aspx理论上你也可以在一段时间后,或者当你遇到问题时,删除迁移历史表和文件,并制作Add-Migrations。然后初始创建将生成并保存一个代码,用于创建您已经拥有的所有数据库 - 但迁移历史表中只有一个文件和一行。
猜你喜欢
  • 2011-05-11
  • 2013-11-05
  • 1970-01-01
  • 2023-01-01
  • 2016-05-26
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多