自创建数据库以来,支持上下文的模型已更改。考虑使用 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 迁移更新数据库” 的解决办法

"支持“xxx”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库”解决办法

支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库