小编典典

仅限实体框架代码错误:自创建数据库以来,支持上下文的模型已更改

c#

我使用实体框架4和CTP4创建了一个“仅代码” POCO以用于现有数据库。当我运行查询时出现错误

自创建数据库以来,支持“
xyzContext”上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer。例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并选择添加新数据作为种子。

我不清楚为什么会发生这种情况或我可以更改什么。我只是创建了POCO,定义了一个简单的DbContext,进行了一些调整,然后尝试运行一个简单的查询。由于我使用的是“仅代码”,因此我不知道需要进行的任何配置设置。而且我当然不想重新创建或删除数据库,因为它是现有数据库。

感谢您的任何想法。


阅读 261

收藏
2020-05-19

共1个答案

小编典典

我在Scott Guthrie博客的这篇文章的评论中找到了答案。

http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-
an-existing-
database.aspx

对于那些看到此异常的人:

“自创建数据库以来,支持’生产’上下文的模型已更改。要么手动删除/更新数据库,要么使用IDatabaseInitializer实例调用Database.SetInitializer。”

这是正在发生的事情以及如何处理:

首次创建模型时,我们运行DatabaseInitializer进行诸如创建数据库(如果数据库不存在)或添加种子数据之类的操作。默认的DatabaseInitializer尝试将使用该模型所需的数据库架构与存储在使用数据库创建的EdmMetadata表中的架构的哈希进行比较(当Code
First是创建数据库的数据库时)。现有的数据库将没有EdmMetadata表,因此也将没有哈希表,如果缺少该表,今天的实现将被抛出。由于它是默认版本,因此在发布最终版本之前,我们将努力更改此行为。在此之前,现有数据库通常不需要任何数据库初始化程序,因此可以通过调用以下上下文类型将其关闭:

Database.SetInitializer<Production>(null);
2020-05-19