所以我有一个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,但有效。如果有人能说清楚,我会很感激。
答案 0 :(得分:0)
如果您确定自创建数据库后未更新EF模型,则只需删除_MigrationHistory表即可。 这仅用于确保数据库和模型同步,但它不适用于您所用的场景。
将来,您仍然可以使用EF的迁移功能,将“-script”添加到您在开发环境中执行的update-database命令的标志中,如下所示。这将生成一个可以在生产数据库上执行的迁移脚本。
> update-database -script
答案 1 :(得分:0)
“搞定了!我添加了一个自定义初始化程序。”
为什么会这样:... 尽管EF看到了一些微妙的差异,但您仍可以访问数据库。 您的代码实现了IDatabaseInitializer并忽略了初始化或MIGRATE到最新版本的机会(空方法)。所以Ef认为数据库不对,你还是继续。
稳定状态EF访问的长期观点。 我想看看迁移到最新版本的工作。
由于我使用的是共享托管环境,因此我无法使用内置的初始化程序。“
为什么不呢?