R.P*_*rog 2 c# mysql entity-framework entity-framework-core asp.net-core
我在.net core 1.1中使用单个用户帐户标识创建新项目。我在Startup.cs中添加MySql提供程序:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时update-database会出现如下错误:
MySql.Data.MySqlClient.MySqlException: Table 'cloud.__EFMigrationsHistory' doesn't exist at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLRelationalCommand.Execute(IRelationalConnection connection, String executeMethod, IReadOnlyDictionary`2 parameterValues, Boolean closeConnection)
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.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.<>c__DisplayClass0_0.<Configure>b__0()
at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
Table 'cloud.__EFMigrationsHistory' doesn't exist
Run Code Online (Sandbox Code Playgroud)
我该做什么?
这与ASP.NET标识或ASP.NET Core无关。通常,这与实体框架有关。当您更新数据库时,EF使用__EFMigrationsHistory来记录执行了哪些迁移,因此以后不再执行它们。
此功能由数据库提供程序而不是EF本身实现。至少有一种情况是PostgresSQL的Npgsql提供者没有创建表。
解决方案很简单-自己创建表:
CREATE TABLE `__EFMigrationsHistory`
(
`MigrationId` nvarchar(150) NOT NULL,
`ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY (`MigrationId`)
);
Run Code Online (Sandbox Code Playgroud)
更新
2016年还有另一个 类似的问题。这是官方MySQL提供程序的错误。解决方法是创建表。也不是唯一的一个。例如,通过在不同的线程上运行异步操作来伪造它们。
我建议您调查诸如Pomelo.EntityFrameworkCore.MySql的第三方MySQL提供程序。他们发现并修复了1年前的迁移历史记录错误。
鉴于MySQL的所有者是Oracle,不要期望连接器会取得很大的进步。还是数据库。
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |