我有一个奇怪的问题,我无法找到解决方案。
堆栈是: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()
答案 0 :(得分:2)
原因很简单。
我在EnsureCreated
中呼叫Startup.cs
,这与迁移冲突的方式不同。
值得庆幸的是,EF Core的所有者在GitHub上为我说清楚。
总而言之 - 如果您想使用迁移,则不能使用EnsureCreated。
答案 1 :(得分:1)
我做的事情真蠢!我从另一个微服务复制了连接字符串,并且连接字符串中的数据库错误-该数据库已经具有错误所抱怨的表!阻止复制再次罢工!