mysql - ASP.NET Core MVC 应用程序无法在 MariaDB 上应用 Entity Framework Core Migration。指定的密钥太长
问题描述
编辑:原来我使用的数据库与我在 Startup.cs 类 ConfigureServices 方法中指定的版本不同。更新生产数据库解决了这个问题。
---下面的原始问题---
此迁移在开发期间适用于相同类型的数据库服务器,但不适用于生产
运行 '$ dotnet core ef database update' 会产生以下结果:
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (5ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `AspNetRoles` (
`Id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
`Name` varchar(256) CHARACTER SET utf8mb4 NULL,
`NormalizedName` varchar(256) CHARACTER SET utf8mb4 NULL,
`ConcurrencyStamp` longtext CHARACTER SET utf8mb4 NULL,
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);
Failed executing DbCommand (5ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `AspNetRoles` (
`Id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
`Name` varchar(256) CHARACTER SET utf8mb4 NULL,
`NormalizedName` varchar(256) CHARACTER SET utf8mb4 NULL,
`ConcurrencyStamp` longtext CHARACTER SET utf8mb4 NULL,
CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);
MySql.Data.MySqlClient.MySqlException (0x80004005): Specified key was too long; max key length is 767 bytes
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Specified key was too long; max key length is 767 bytes
at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 49
at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 130
at MySql.Data.MySqlClient.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 391
at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList`1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\CommandExecutor.cs:line 62
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 226
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 74
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Pomelo.EntityFrameworkCore.MySql.Migrations.Internal.MySqlMigrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Specified key was too long; max key length is 767 bytes
解决方案
事实证明,我使用的数据库版本与我在 Startup.cs 类 ConfigureServices 方法中指定的版本不同。更新生产数据库解决了这个问题。
推荐阅读
- go - 返回由 CockroachDB 在事务后创建的行 ID
- java - 如何在链接列表中显示与来自 JOptionPane 的用户输入相匹配的结果?
- c++ - std::vector< base_class * > iterate using base but call derived classes function
- java - 如何访问膨胀布局内的 TextView 的值
- r - cSplit(data,“text”,“,”,“long”)之后如何管理重复项?
- android - Android Studio:已创建数据库但未创建表
- c++ - 即使输入是另一种数据类型,C++ cin.fail() 也会执行并移至下一行
- r - 无论是否不存在某些列,都在列集上设置数据帧
- excel - 根据单元格值添加/删除行
- c# - 在页面加载事件期间加载时,下拉列表控件被另一个控件覆盖