mysql - 使用 Volo ABP for MySQL 的迁移问题
问题描述
我最近使用以下配置从abp.io下载了一个项目:
Project Type: Application
UI Framework: Angular
Database Provider: Entity Framework Core
Separate Identity Server: Yes
更新数据库时,我在包管理器控制台中收到以下错误。
BLOB/TEXT column 'Value' used in key specification without a key length
以下是迁移脚本:
migrationBuilder.CreateTable(
name: "IdentityServerApiSecrets",
columns: table => new
{
Type = table.Column<string>(maxLength: 250, nullable: false),
Value = table.Column<string>(maxLength: 4000, nullable: false),
ApiResourceId = table.Column<Guid>(nullable: false),
Description = table.Column<string>(maxLength: 2000, nullable: true),
Expiration = table.Column<DateTime>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value });
table.ForeignKey(
name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResou~",
column: x => x.ApiResourceId,
principalTable: "IdentityServerApiResources",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
我删除了旧的迁移并添加了一个新的迁移,结果是上面的脚本。
我将“Value”属性的 maxLength 更改为 1000。现在它显示以下错误消息:
Specified key was too long; max key length is 3072 bytes
我尝试在 MySql Workbench 中运行以下脚本 [在包管理器控制台中生成]。这也给了我同样的错误信息。
CREATE TABLE `IdentityServerApiSecrets` (
`Type` varchar(250) CHARACTER SET utf8mb4 NOT NULL,
`Value` varchar(1000) CHARACTER SET utf8mb4 NOT NULL,
`ApiResourceId` varchar(36) CHARACTER SET utf8mb4 NOT NULL,
`Description` varchar(2000) CHARACTER SET utf8mb4 NULL,
`Expiration` datetime(6) NULL,
CONSTRAINT `PK_IdentityServerApiSecrets` PRIMARY KEY (`ApiResourceId`, `Type`, `Value`),
CONSTRAINT `FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResou~` FOREIGN KEY (`ApiResourceId`) REFERENCES `IdentityServerApiResources` (`Id`) ON DELETE CASCADE
;
请帮忙。
解决方案
在您的 Migration DbContext 上执行此操作。
builder.ConfigureIdentityServer(options =>
{
options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
});
推荐阅读
- java - MAVEN 构建失败对节点权限被拒绝
- docusignapi - 由于不再支持 DocuSign 遗留标头身份验证,并且最终用户的 OAuth 身份验证对我们没有意义,我们有哪些选择?
- python - 为什么即使使用 cv.IMREAD_ANYDEPTH,cv2.imread 也会为 32 位图像输出一个零矩阵?
- android - 如何使用 Firebase SDK 在原生 Android 和 iOS 应用中实现跨域测量?
- excel - 是否有内置的excel函数可以检查:“1,3,5-9,13,16-20,23”中的“10”(或任何数字)?
- angular - 更新视图时出现 ExpressionChangedAfterItHasBeenCheckedError
- java - 有没有办法修复我的自定义主题按钮的样式?
- javascript - 检测垃圾邮件过滤器
- java - rpc 错误:代码 = 2 desc = oci 运行时错误:执行失败:参数列表太长
- c++ - OpenGL对象局部旋转全局旋转