自创建数据库以来,支持上下文的模型已更改。考虑使用 Code First 迁移来更新数据库
Posted
技术标签:
【中文标题】自创建数据库以来,支持上下文的模型已更改。考虑使用 Code First 迁移来更新数据库【英文标题】:model backing the context has changed since the database was created. Consider using Code First Migrations to update the database 【发布时间】:2014-03-25 06:43:44 【问题描述】:我正在使用 MVC5 和 EF6 CodeFirst 迁移。我的模型与我的 MVC Web 应用程序位于一个单独的项目中,并且在尝试访问模型类时不断收到此错误。我已经启用了自动迁移。我可以删除整个数据库,然后使用 update-database 重新生成我仍然收到此错误的所有内容。错误是错误的,因为自从我创建数据库以来上下文没有改变。此外,通过单元测试项目,使用与我在 MVC 应用程序中相同的调用代码,我可以引用相同的模型项目,访问模型类和数据。我将模型与 MVC 项目分开,因为我需要能够在网络之外重用模型。
支持“xx”上下文的模型在创建数据库后发生了变化。考虑使用 Code First 迁移来更新数据库
【问题讨论】:
字面意思是我今天发布的问题,逐字逐句 - 您没有发布任何答案!你解决了什么问题吗? 我再次启用了迁移,这次是在一个单独的目录中,删除了数据库并让它在运行时创建它,而不是通过更新数据库。我必须创建一个初始迁移,删除其中的所有代码才能运行我的种子方法。这是一种时尚。我将看看这将如何运作。 类似:***.com/questions/28276571/… 【参考方案1】:Database.SetInitializer<DbContext>(null);
http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3
【讨论】:
有人请向我解释分配 Database.SetInitializer(null); 的缺点是什么我已经尝试过了,它似乎对我有用。但是,如果我需要修改我的数据库表,我不确定将来会发生什么。代码第一次迁移是否不再起作用或什么。谢谢【参考方案2】:我遇到了类似的问题:
支持“ApplicationDbContext”上下文的模型已更改 数据库已创建。考虑使用 Code First 迁移 更新数据库
我有一个 MVC 项目和另一个模型、上下文和存储库项目。我已经为此工作了数周,但今天它说停止。
我曾多次尝试删除数据库、启用迁移、添加迁移和更新数据库,以至于数不清。我已将初始化程序添加到 MigrateDatabaseToLatestVersion 以及 DropCreateDatabaseIfModelChanges。
最终让它发挥作用的是将模型、上下文和存储库移动到 MVC 项目中(这不是我热衷的事情)……然后它开箱即用,根本不需要任何代码更改(除了命名空间)!很奇怪……
我在白天阅读了很多博客文章,试图解决这个问题。其中一个(我不知道是哪一个)提到了 Visual Studio 2013 中的一个错误,其中对 DLL 文件的引用并不总是按应有的方式更新,这表明我的 MVC 项目在我运行 add-migration 和更新时遗漏了一些东西-我单独项目中的数据库。但这只是猜测。
我在我的解决方案中使用 EF 6.1 和 .Net 4.5.1。
【讨论】:
【参考方案3】:只是为了详细说明 RouR 的答案:
我有一个附加了模型的 MVC Web 项目。
然后我创建了一个使用此模型的控制台应用程序。
我的控制台应用程序,只知道连接字符串并有 EF 引用,只是不知道如何让每个人进行通信。
因此,出现模型支持数据库更改错误
引擎只是对如何继续它看到并期望一个实体感到困惑,就像引用一样,它只是在找不到合适的上下文时丢失它,并假设上下文没有正确迁移。
我们来了,
Database.SetInitializer<MyProject.Models.MyModel>(null);
【讨论】:
仅供参考:这需要添加到 MVC 项目的受保护 void Application_Start() 中【参考方案4】:我们遇到了同样的问题。为我解决它的不一定是将模型、上下文移动到 MVC 项目中,而是将我的单独项目移动到与 MVC 项目相同的解决方案并通过项目文件夹引用它。
这可行,但引用 DLL 而不是项目不起作用。
有趣的是,当创建一个新的控制台应用程序并引用 DLL 程序集时,我们没有遇到这个问题...仅来自 MVC 项目
【讨论】:
以上是关于自创建数据库以来,支持上下文的模型已更改。考虑使用 Code First 迁移来更新数据库的主要内容,如果未能解决你的问题,请参考以下文章
自创建数据库以来,支持“ApplicationDbContext”上下文的模型已更改
错误:自创建数据库以来,支持'NameDbContext'上下文的模型已更改
支持“xxx”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
关于 “支持“XXXDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库” 的解决办法