无法在EF Core中使用迁移:" 42P07:关系" AspNetRoles"已存在"

时间:2017-11-21 18:39:32

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

我有一个奇怪的问题,我无法找到解决方案。

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

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

即使出现此错误,也会创建数据库和表,但由于无法保存已应用的迁移,因此迁移无效,因此我无法通过以下更改来更新数据库...

  

失败:Microsoft.EntityFrameworkCore.Database.Command [200102]         执行DbCommand失败(0ms)[Parameters = [],CommandType =' Text',CommandTimeout =' 30']         CREATE TABLE" AspNetRoles" (             "标识" text NOT NULL,             " ConcurrencyStamp"文字为NULL,             "名称" varchar(256)NULL,             " NormalizedName" varchar(256)NULL,             CONSTRAINT" PK_AspNetRoles"主要关键(" Id")         ); Npgsql.PostgresException(0x80004005):42P07:relation" AspNetRoles"已存在于   Npgsql.NpgsqlConnector.d__148.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at System.Runtime.CompilerServices.ValueTaskAwaiter 1.GetResult()
  在Npgsql.NpgsqlConnector.d__147.MoveNext()

2 个答案:

答案 0 :(得分:2)

原因很简单。 我在EnsureCreated中呼叫Startup.cs,这与迁移冲突的方式不同。 值得庆幸的是,EF Core的所有者在GitHub上为我说清楚。

总而言之 - 如果您想使用迁移,则不能使用EnsureCreated。

答案 1 :(得分:1)

我做的事情真蠢!我从另一个微服务复制了连接字符串,并且连接字符串中的数据库错误-该数据库已经具有错误所抱怨的表!阻止复制再次罢工!