【发布时间】:2012-07-19 19:17:58
【问题描述】:
我使用了来自 Nuget 包管理器的 MVCScaffolding,并按照简要教程了解了它的工作原理。
看起来很简单,当我跑步时
Scaffold Controller Team –Repository -Force 它将创建围绕“团队”的所有存储库模式内容。
但是,为了尝试(并成功)打破这一点,我决定在“团队”类中添加一个额外的字段 (myRandomField)。
正如我所料,当我编译时,MVC 视图中出现错误:
支持“MvcApplication1Context”上下文的模型在创建数据库后发生了变化。手动删除/更新数据库,或使用 IDatabaseInitializer 实例调用 Database.SetInitializer。例如,DropCreateDatabaseIfModelChanges 策略将自动删除并重新创建数据库,并可选择为其添加新数据。
很明显,这个错误是因为我更新了模型(代码优先??)并且数据库现在与我的模型“不同步”。
解决此问题的最佳方法是什么?是否有一种简单的方法可以与模型进行数据库同步 - 我计划对我的模型进行大量编辑,因为我开始的项目将逐渐推出(因此每次都进行完整的数据库重建是不可能的)在这种情况下,代码优先对我来说是正确的方法吗?我真的很喜欢这个插件/工具,如果不使用它会很遗憾。
【问题讨论】:
-
jad - 让我了解这里的基础知识。您是否希望在不丢失现有数据的情况下同步数据库,或者您是否乐于看到更改丢弃所有现有数据?如果是前者,那么我会在答案中解决这个问题,否则,只需在 global.asax 中使用
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<YourContext>()); -
@jimtollan 正确,我不想丢失现有数据。
标签: asp.net-mvc-3 code-first asp.net-mvc-scaffolding