Postgres ef-core 更新数据库产生“42P01:关系“__EFMigrationsHistory”不存在”错误
Postegres ef-core update database produce "42P01: relation "__EFMigrationsHistory" does not exist" error
设置
Asp.NET 核心网站 2.2 和 EF Core 2.2
具有多个模式的 Postgresql 数据库,其中一个模式已经有 __EFMigrationsHistory
table
尝试时
Add-Migration x1 -Context YodaContext
有效
但是在尝试以下语句时
Update-Database -Context YodaContext
第一次(我在这个模式中没有任何 tables 这是第一个更新数据库)我看到以下错误。
Failed executing DbCommand (85ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "MigrationId", "ProductVersion"
FROM "__EFMigrationsHistory"
ORDER BY "MigrationId";
Npgsql.PostgresException (0x80004005): 42P01: relation "__EFMigrationsHistory" does not exist
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 444
at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 332
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1218
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1130
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
42P01: relation "__EFMigrationsHistory" does not exist
我做了什么
我搜索了这个错误,我找到了这个bug on github
建议的解决方案是手动创建 table,我这样做了,但这并没有解决问题。
我还尝试打开一个新的 .NET 5 项目并安装最新版本的 Npgsql.EntityFrameworkCore.PostgreSQL
v 5.0.0 提供程序以连接到该数据库,但我仍然面临这个问题
此题没有解决问题
我在一家非常大的企业工作时遇到了这个问题,所以企业自己应用的解决方案,他们删除了模式并重新创建它(正如他们告诉我的那样)也许他们做了一些其他的事情,我没有知道。
之后一切顺利,Update-Database
语句运行良好。
我也有同样的问题,但我没有权限删除架构并在我的公司重新创建它。
我用另一种方式解决了问题:
- I 运行 命令执行迁移。
Add-Migration InitialIdentityUser -Context IdentityUserDbContext
- 在那之后,我使用了棘手的命令
Script-Migration -from 0
。此命令生成一堆 sql 查询以创建架构和表。
- 我使用非常酷的工具 - flyway 进行迁移 https://flywaydb.org/
- 使用 flyway 工具执行
baseline
命令。
flyway baseline -locations=filesystem:. -url=... -user=... -password=... -baselineVersion="001" -schemas=...
- 最后,执行
migrate
命令迁移所有sql个表。
flyway migrate -locations=filesystem:. -url=... -user=... -password=... -schemas=...
我遇到了同样的问题,因为我的数据库 (POSTGRESQL) 有另一个包含 ____EFMigrationsHistory table 的模式。我认为这是提供商的错误,在我的例子中是 postgresql 提供商。我在新架构上手动table创建了相同的,然后更新数据库命令成功执行
设置
Asp.NET 核心网站 2.2 和 EF Core 2.2
具有多个模式的 Postgresql 数据库,其中一个模式已经有 __EFMigrationsHistory
table
尝试时
Add-Migration x1 -Context YodaContext
有效
但是在尝试以下语句时
Update-Database -Context YodaContext
第一次(我在这个模式中没有任何 tables 这是第一个更新数据库)我看到以下错误。
Failed executing DbCommand (85ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "MigrationId", "ProductVersion"
FROM "__EFMigrationsHistory"
ORDER BY "MigrationId";
Npgsql.PostgresException (0x80004005): 42P01: relation "__EFMigrationsHistory" does not exist
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
--- End of stack trace from previous location where exception was thrown ---
at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 444
at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 332
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1218
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1130
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
42P01: relation "__EFMigrationsHistory" does not exist
我做了什么
我搜索了这个错误,我找到了这个bug on github 建议的解决方案是手动创建 table,我这样做了,但这并没有解决问题。
我还尝试打开一个新的 .NET 5 项目并安装最新版本的
Npgsql.EntityFrameworkCore.PostgreSQL
v 5.0.0 提供程序以连接到该数据库,但我仍然面临这个问题
此题没有解决问题
我在一家非常大的企业工作时遇到了这个问题,所以企业自己应用的解决方案,他们删除了模式并重新创建它(正如他们告诉我的那样)也许他们做了一些其他的事情,我没有知道。
之后一切顺利,Update-Database
语句运行良好。
我也有同样的问题,但我没有权限删除架构并在我的公司重新创建它。 我用另一种方式解决了问题:
- I 运行 命令执行迁移。
Add-Migration InitialIdentityUser -Context IdentityUserDbContext
- 在那之后,我使用了棘手的命令
Script-Migration -from 0
。此命令生成一堆 sql 查询以创建架构和表。 - 我使用非常酷的工具 - flyway 进行迁移 https://flywaydb.org/
- 使用 flyway 工具执行
baseline
命令。
flyway baseline -locations=filesystem:. -url=... -user=... -password=... -baselineVersion="001" -schemas=...
- 最后,执行
migrate
命令迁移所有sql个表。
flyway migrate -locations=filesystem:. -url=... -user=... -password=... -schemas=...
我遇到了同样的问题,因为我的数据库 (POSTGRESQL) 有另一个包含 ____EFMigrationsHistory table 的模式。我认为这是提供商的错误,在我的例子中是 postgresql 提供商。我在新架构上手动table创建了相同的,然后更新数据库命令成功执行