【问题标题】:Sql Azure CompatibleWithModel not workingSql Azure CompatibleWithModel 不起作用
【发布时间】:2012-05-30 15:03:16
【问题描述】:

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

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

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

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

有什么建议吗?

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

谢谢 马丁

【问题讨论】:

  • 你的 MVC 和 EF 版本是多少?取决于不同的版本,有不同的方法来处理此类问题。另外,如果您不想使用 Database.SetInitializer,您仍然可以使用 Database.SetInitializer(null);在 Global.asax 的 Application_Start() 中
  • 我正在使用 MVC3 和 EF v4。 @AvkashChauhan

标签: sql azure code-first azure-sql-database


【解决方案1】:

请查看下方的 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 是一个问题,除非您对使用它有一些认真的想法。

更多信息:Entity Framework Code Only error: the model backing the context has changed since the database was created

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2020-11-04
    • 2021-01-25
    • 2021-10-19
    • 2015-10-19
    相关资源
    最近更新 更多