【问题标题】:Error: The model backing the 'NameDbContext' context has changed since the database was created错误:支持“NameDbContext”上下文的模型自创建数据库以来已更改
【发布时间】:2019-04-12 14:51:26
【问题描述】:

我试图解决的原始问题与此错误消息有关。这发生在 Azure 上运行的 Web API 2 项目中。

错误 1

在表“Keys”上引入 FOREIGN KEY 约束“FK_dbo.Merchant_MerchantId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

仅在我尝试将我的 API 的发布版本上传到我的 Azure 应用服务后才引入 FOREGIN KEY 错误消息。我最近升级到 Visual Studio 2017 的 15.9.11 版,但我不知道这是否是导致这个混乱的 FOREIGN KEY 问题的原因。这个 API 和数据库已经运行多年,没有任何问题。

为了尝试解决问题,我在 OnModelCreating(DbModelBuilder modelBuilder) 方法中添加了以下行。

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

添加行类型修复了问题,错误 1 ​​已经消失,但现在 API 没有找到实际在数据库中的记录。我不确定为什么会这样。

此后,我已注释掉该行并上传了我的应用服务的新版本。我现在收到此错误消息。

错误 2

错误:支持“NameDbContext”上下文的模型自数据库创建以来已更改。

在这个阶段,我正在引发更多问题,而不是解决我原来的问题。

非常感谢您从这个混乱中恢复过来的任何帮助!谢谢!

更新 1

我与一位 Microsoft 工程师合作解决了“自创建数据库以来支持 'NameDbContext' 上下文的模型已更改”错误。我在 Global.asax.cs 文件中的 Application_Start() 中添加了以下内容。添加这个并没有删除或更改我在 SQL 中的任何数据。错误消息 2 已消失。 API 仍然没有返回数据库中的记录,所以我还有一个问题需要解决。

Database.SetInitializer<FaceOffersDbContext>(null);

更新 2

我在本地运行我的 API 没有任何问题。这意味着该问题仅发生在 Azure 中。我正在与 Microsoft 合作以缩小问题范围并提出解决方案。

【问题讨论】:

    标签: entity-framework ef-code-first asp.net-web-api2


    【解决方案1】:

    您的数据库架构似乎已更改,并且与您的实体框架不符,您可以尝试使用包管理器控制台强制更新您的数据库。

    【讨论】:

    • 感谢您的帮助!你能再具体一点吗?有没有办法撤消什么 modelBuilder.Conventions.Remove();好像做了?在我添加这行代码之前,我想尝试恢复生活。 :) 然后我可以继续处理原来的错误。
    • 也许我可以像这样添加 OneToManyCascadeDeleteConvention。 modelBuilder.Conventions.Add();
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2014-04-19
    • 2011-04-05
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多