Проблема с миграциями с использованием Volo ABP для MySQL - PullRequest
0 голосов
/ 02 апреля 2020

Я недавно загрузил проект из abp.io с использованием следующих конфигураций:

Project Type: Application
UI Framework: Angular
Database Provider: Entity Framework Core
Separate Identity Server: Yes

При обновлении базы данных я получаю следующую ошибку в Package Mangager Console.

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);
            });

Я удалил старые миграции и добавил новую миграцию, которая выглядела как приведенный выше сценарий.

Я изменил значение maxLength из 'Value 'свойство до 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
;

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 апреля 2020

Сделайте это на вашем миграционном DbContext.

builder.ConfigureIdentityServer(options =>
{
    options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
});
...