0

在我的代码中,我试图通过使用“mycontext.Database.CompatibleWithModel(true)”检查我的实体框架 Code First 模型和 Sql Azure 数据库是否同步。但是,当存在不兼容时,这条线会出现以下异常。

“支持 'MyContext' 上下文的模型自创建数据库以来已更改。手动删除/更新数据库,或使用 IDatabaseInitializer 实例调用 Database.SetInitializer。例如,DropCreateDatabaseIfModelChanges 策略将自动删除并重新创建数据库,并且可选择用新数据播种它。”

这似乎违背了检查的目的,因为检查本身由于不兼容而倒下。

由于各种原因,我不想使用 Database.SetInitializer 方法。

有什么建议么?

这是一个特定的 Sql Azure 问题吗?

谢谢马丁

4

1 回答 1

0

请查看下面的 ScottGu 博客:

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

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

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

Database.SetInitializer<Production>(null);

使用上面的代码,您不会重新创建数据库,而是使用现有的数据库,所以我不认为使用 Database.SetInitializer 是一个问题,除非您对使用它有一些认真的想法。

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

于 2012-05-31T06:22:02.147 回答