我在.net核心1.1中创建具有单独用户帐户标识的新项目。我在Startup.cs中添加了MySql Provider:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));
但是当我尝试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
我应该做什么?
答案 0 :(得分:5)
这与ASP.NET Identity或ASP.NET Core无关。这与实体框架有关。更新数据库时,EF使用__EFMigrationsHistory
记录执行的迁移,以便将来不再执行这些迁移。
此功能由数据库提供程序实现,而不是EF本身。至少有一种情况是PostgresSQL的{Npgsql提供程序didn't create the table。
解决方案很简单 - 自己创建表格:
CREATE TABLE `__EFMigrationsHistory`
(
`MigrationId` nvarchar(150) NOT NULL,
`ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY (`MigrationId`)
);
更新
2016年有另一个 similar question。这是官方MySQL提供商的错误。修复是创建表。不是唯一的一个。例如,异步操作是通过在不同的线程上运行它们来伪造的。
我建议您调查第三方MySQL提供商,例如Pomelo.EntityFrameworkCore.MySql。他们{1}迁移历史错误1年前。
鉴于MySQL的所有者是 Oracle ,不要期望连接器上有很多进展。或数据库。