Как перенести. Net Core Identity Tables на MySql? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть приложение. Net Core 3.1, которое использует Microsoft Identity Franework

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

7 создаваемых им таблиц (aspnetusers et c) были созданы с использованием Add-Migration и отлично работает с сервером MySql на локальном хосте.

Я пытаюсь развернуть свое решение в другой базе данных MySql на моем интернет-провайдере, но когда я использую MySql Workbench Мастер миграции, я получаю такие ошибки, как

Specified key was too long; max key length is 767 bytes.
SQL Error: 1071

. Когда я сокращаю эти 255-символьные поля, чтобы они были меньше, я начинаю получать ошибки ограничения внешнего ключа, даже когда я переупорядочиваю таблицы, чтобы внешние ключи не создаются до тех пор, пока не будут созданы таблицы, от которых они зависят.

Кто-нибудь знает, как я могу перенести таблицы идентификаторов в базу данных моего провайдера? Я попытался обойти это (хотя я бы потерял данные), выполнив следующую команду Update-Database -Migration AddIdentityTables -Context = "MyDbContext", но это ничего не дало, поскольку миграция уже была применена и не позволяет мне указать строку подключения к базе данных поставщика услуг Интернета.

Есть идеи?

1 Ответ

0 голосов
/ 17 июня 2020

Хорошо, я смог принудительно выполнить миграцию, но это было болезненно. Я сделал это в два этапа:

  1. Сначала перенесите таблицы aspnetusers и aspnetroles
  2. Перенесите все остальные таблицы, так как у них есть внешние ключи aspnetroleclaims, aspnetuserclaims, aspnetuserlogins, aspnetuserroles, aspnetusertokens

Но один из подводных камней заключается в том, что все поля таблицы идентификаторов Microsoft - это varchar (255), по крайней мере, если вы позволяете. Net Базовые леса создают их. Я понятия не имею, какие типы данных он генерирует, если вы используете SQL Server, но это varchar (255) для MySQL с использованием Pomelo.EntityFrameworkCore. MySql.

Таким образом, при использовании MySql Workbench Migration Wizard, и вы перейдете на этап редактирования вручную, вам нужно выбрать «Сопоставление столбцов» из раскрывающегося списка и вручную изменить все VARCHAR (255) в целевых полях на VARCHAR (100).

Обязательно нажмите «Показать код и сообщения», чтобы также изменить длину полей внешнего ключа на 100 для каждой таблицы.

Затем просто go через Мастер миграции выполняет каждый из шагов 1 и 2, описанных выше, и все работает.

Возможно, лучший способ сделать это - позволить мастеру миграции сгенерировать для вас 2. sql файла. Затем просто найдите и замените 255 на 100 и последовательно запустите каждый сценарий.

Я уверен, что это не лучший способ решить мою проблему, но он сработал.

Примечание. Я ограничен именами пользователей, адресами электронной почты и ролями длиной не более 100 символов, но для того, что я делаю, этого достаточно.

...