【问题标题】:Entity Code first with shared host production DB实体代码优先与共享主机生产数据库
【发布时间】:2013-02-19 06:03:08
【问题描述】:

所以我有一个在 localhost 上工作的 MVC4 项目,是时候将它上传到共享环境了。

由于我使用的是共享主机环境,我无法使用内置的初始化程序。所以我创建了我的 mdf 文件 (.bak) 的备份并将其上传到我的生产环境。一切看起来都不错......表格都在那里......但是当我运行我的应用程序时,我得到了这个异常:

支持“YourContext”上下文的模型在创建数据库后发生了变化。考虑使用 Code First 迁移来更新数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。


搞定了!

我添加了一个自定义初始化程序。

public class ProductionInitializer : IDatabaseInitializer<AvariceContext>
{
    public void InitializeDatabase(AvariceContext context)
    {
    }
}

解决方案...有点骇人听闻,但有效。如果有人能解释一下,我将不胜感激。

【问题讨论】:

  • 我找到了 MigrationHistory 系统的表。两个数据库匹配。

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


【解决方案1】:

如果您确定自创建数据库后尚未更新 EF 模型,您可以删除 _MigrationHistory 表。 这仅用于确保数据库和模型同步,但在您概述的场景中不起作用。

将来,您仍然可以通过将“-script”添加到您在开发环境中执行的更新数据库命令的标志中来使用 EF 的迁移功能,如下所示。这将生成一个迁移脚本,您可以在生产数据库上执行该脚本。

> update-database -script

【讨论】:

    【解决方案2】:

    “搞定了!我添加了一个自定义初始化程序。”

    为什么会这样:... 尽管 EF 发现了一些细微的差异,但您仍然可以访问数据库。 您的代码实现了 IDatabaseInitializer 并忽略了初始化或迁移到最新版本的机会(空方法)。所以 Ef 认为 DB 不对,你还是继续。

    对于稳定状态的 EF 访问不是长远的眼光。 我会考虑让迁移到最新版本的工作。

    由于我使用的是共享主机环境,我无法使用内置的初始化程序。”

    为什么不呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2016-05-23
      • 2012-03-15
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多