实体代码首先使用共享主机生产DB

时间:2013-02-19 06:03:08

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

所以我有一个MVC4项目在localhost上运行,是时候把它上传到共享环境了。

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

自创建数据库以来,支持'YourContext'上下文的模型已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。


搞定了!

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

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

解决方案......是hackish,但有效。如果有人能说清楚,我会很感激。

2 个答案:

答案 0 :(得分:0)

如果您确定自创建数据库后未更新EF模型,则只需删除_MigrationHistory表即可。 这仅用于确保数据库和模型同步,但它不适用于您所用的场景。

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

> update-database -script

答案 1 :(得分:0)

  

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

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

稳定状态EF访问的长期观点。 我想看看迁移到最新版本的工作。

  

由于我使用的是共享托管环境,因此我无法使用内置的初始化程序。“

为什么不呢?

相关问题