【问题标题】:Can't use migrations in EF Core: "42P07: relation "AspNetRoles" already exists"无法在 EF Core 中使用迁移:“42P07:关系“AspNetRoles”已经存在”
【发布时间】:2020-02-03 23:35:55
【问题描述】:

我有一个奇怪的问题,我找不到解决办法。

堆栈是:NET Core 2、EF、PostgreSQL。 我使用 .NET Core Identity 和 User : IdentityUser 来扩展基本用户模型和附加字段。

创建第一个迁移后,删除整个数据库并尝试dotnet ef database update 我总是收到错误:42P07: relation "AspNetRoles" already exists

即使出现此错误,也会创建数据库和表,但它会使迁移变得无用,因为它不保存已应用的迁移,因此我无法使用以下更改更新数据库...

失败:Microsoft.EntityFrameworkCore.Database.Command[200102] 执行 DbCommand 失败 (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] 创建表“AspNetRoles”( “Id”文本不为空, "ConcurrencyStamp" 文本 NULL, “名称” varchar(256) NULL, "NormalizedName" varchar(256) NULL, 约束“PK_AspNetRoles”主键(“Id”) ); Npgsql.PostgresException (0x80004005): 42P07: 关系“AspNetRoles”已经存在于 Npgsql.NpgsqlConnector.d__148.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at System.Runtime.CompilerServices.ValueTaskAwaiter1.GetResult()
在 Npgsql.NpgsqlConnector.d__147.MoveNext()

【问题讨论】:

  • 迁移创建后您是否更改了一些内容?该操作可能会触发类似的错误
  • 没有。没有什么。我已经尝试过多次删除迁移并再次创建它们。

标签: c# postgresql entity-framework asp.net-core


【解决方案1】:

原因很简单。 我在Startup.cs 中打电话给EnsureCreated,因为工作方式不同,这与迁移发生冲突。 谢天谢地,EF Core 所有者在 GitHub 上向我说明了这一点。

总结一下——如果你想使用迁移,你不能使用 EnsureCreated。

【讨论】:

    【解决方案2】:

    我在做一些非常愚蠢的事情!我从另一个微服务复制了连接字符串,它的连接字符串中有错误的数据库 - 该数据库已经有错误抱怨的表!阻止复制再次来袭!

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2018-04-07
      • 2013-02-04
      • 2015-09-01
      • 2012-09-18
      • 2023-03-08
      • 2015-04-28
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多