gpt4 book ai didi

c# - 自创建数据库以来,支持 '--Context' 上下文的模型已更改 - 但 db 是新的生产数据库

转载 作者:IT王子 更新时间:2023-10-29 04:22:41 25 4
gpt4 key购买 nike

我已经第 762 次遇到此错误,但这次我在删除 Azure 上的“生产”数据库并发布我的网站后,在尝试访问我的生产网站时立即收到此错误。

The model backing the 'PropertyContext' context has changed since the database was created. Consider using Code First Migrations to update the database

我删除了数据库,因为我无法以其他方式解决此问题,但它仍然不起作用。

一些要点:

  • 我正在使用 EF6 并发布到 Azure。
  • 这是使用同一 Repo 项目的 2 个项目/网站之一。我没有
    另一处有问题,只有这一处有问题。
  • 我尝试先发布问题项目(删除数据库后)并且第二个具有相同的结果。
  • 我尝试从 Azure 中删除网站和数据库,然后重新开始
  • 我尝试删除所有迁移并从新的数据模型开始
  • 我在 Global.asax 中尝试了以下操作(在两个项目中)

    Database.SetInitializer PropertyContext>(null); <--所以不会让我把第一个<

Database.SetInitializer(new MigrateDatabaseToLatestVersion<PropertyContext, MyConfiguration>());
new PropertyContext().Database.Initialize(true);

我使用的是.net 4.5

为什么我在新数据库上遇到此错误以及如何使该网站正常工作?

最佳答案

刚刚在 ASP.Net 应用程序中遇到了同样的错误。就我而言,我没有使用 Code First,但我使用了标准 ASP.Net 身份验证提供程序,该提供程序显然使用了 Code First,并且由于此问题,身份验证被破坏。

这是一个快速但肮脏的解决方案,因为您不太关心现有的用户记录:

对我来说,解决方案是删除 dbo.__MigrationHistory表,身份验证此后开始正常工作。 请注意!此解决方案并不适合所有人!这可以解决问题,但存在潜在风险。

如果您无法承受丢失 AspNet* 表中的数据的后果:

ASP.Net 身份验证提供程序会自动在数据库中创建表:

  • AspNet角色
  • AspNetUsers
  • AspNetUserRoles
  • AspNetUserClaims
  • AspNetUserLogings

默认情况下,这些表是空的,如果您还没有为您的网站创建任何新的登录名,则可以使用上面的“快速而肮脏”的解决方案。如果您确实关心保留用户信息或只是好奇 Code First 迁移的工作原理,请按照以下步骤操作:

  • 打开 Web.config 文件并检查数据库连接字符串的名称。它将成为 <connectionStrings> 下的记录之一元素。
  • 打开包管理器控制台:

    工具 –> 库包管理器 –> 包管理器控制台

  • 在“程序包管理器控制台”窗口中,使用下拉菜单设置“默认项目”。确保这是包含 ASP.Net 身份验证提供程序代码的项目。
  • 执行命令:
    Update-Database -ConnectionStringName MyConnectionStringName

将 MyConnectionStringName 替换为您在 web.config 中查找的实际名称。

执行此命令后,您将看到一个新文件夹“Migrations”,其中包含 Update-Database 生成的一堆代码。命令。重新构建并重新部署您的应用程序,您的新迁移代码将在启动时执行,并使数据库架构与更新版本的 ASP.Net 身份验证提供程序代码同步。

关于c# - 自创建数据库以来,支持 '--Context' 上下文的模型已更改 - 但 db 是新的生产数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21852121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com