在代码第一实体框架中手动编辑数据库

bil*_*lly 12 migration data-migration entity-framework ef-code-first entity-framework-4.1

我一直在尝试使用MVC 3的EF 4.1(代码优先).我正在考虑应用程序何时需要更改.我测试了几个场景.我喜欢在模型(我的POCO)发生变化时手动编辑数据库的想法.

更改模型时出现ASP.NET错误:

"自创建数据库以来,支持'CTCMContext'上下文的模型已经发生了变化.手动删除/更新数据库......"

现在,它说我可以" 手动更新数据库 ",但我做了,仍然得到相同的错误.我错过了什么!!?!

编辑

这与EF生成的模型哈希有关吗?

Pai*_*ook 9

我也有过这方面的挣扎.我发现当你让EF为你创建数据库时,会创建一个名为dbo.EdmMetadata的表,这就是EF跟踪模型状态的地方/方式.我发现如果你在最初创建数据库之后删除了这个表,你会把东西放到"手动模式",你现在可以从数据库中手动添加/删除列,表等,EF不会抛出你的错误正在看到.

但是,如果您希望在更改模型时继续使用EF更新数据库,则需要创建并调用ContextInitializer类,该类继承DropCreateDatabaseIfModelChangesDropCreateDatabaseAlways,具体取决于您希望发生的行为.