如何将.Net Core Identity Tables迁移到MySql中?

问题描述 投票:0回答:1

我有一个使用Microsoft Identity Franework的.Net Core 3.1应用程序。

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

它创建的7个表(aspnetusers等)是通过使用 Add-Migration 并与本地host上的MySql后端工作得很好。

我试图将我的解决方案部署到ISP上的另一个MySql数据库中,但当我使用MySql Workbench迁移向导时,我收到了如下错误信息

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

当我把这些255个字符的字段砍得更小的时候,我开始收到外键约束的错误,即使我重新排列表的顺序,使外键在它们所依赖的表被创建后才被创建。

有人知道如何将身份表迁移到ISP的数据库中吗? 我试图通过以下方法来解决这个问题(尽管我会丢失数据)。Update-Database -Migration AddIdentityTables -Context = "MyDbContext" 但这并没有什么用,因为迁移已经被应用了,它不会让我指定一个连接字符串到ISP的数据库。

有什么办法吗?

mysql asp.net-mvc .net-core ef-migrations
1个回答
0
投票

好吧,我能够强制迁移,但是很痛苦。 我分两步做的。

  1. 迁移 aspnetusersaspnetroles 表先
  2. 迁移所有其余的表,因为它们有外键。aspnetroleclaims, aspnetuserclaims, aspnetuserlogins, aspnetuserroles, aspnetusertokens

但其中一个问题是微软的身份表字段都是varchar(255),至少当你让.Net Core脚手架创建它们的时候。 我不知道如果你使用SQL Server,它会生成什么数据类型,但是使用Pomelo.EntityFrameworkCore.MySql.MySql的MySQL是varchar(255)。

所以当使用MySql Workbench迁移向导,到了手动编辑阶段,你必须从下拉菜单中选择 "Column Mappings",然后手动将目标字段中所有的VARCHAR(255)改为VARCHAR(100)。

确保点击 "显示代码和消息",以便将每个表的外键字段的长度也改为100。

然后只需通过迁移向导进行上面第1&2步的每一个步骤,就可以全部成功了。

更好的方法可能是让迁移向导为你生成2个.sql文件。 然后找到并将255替换为100,连续运行每个脚本即可。

我相信这不可能是解决我的问题的最好方法,但它成功了。

注意:现在我的用户名、电子邮件和角色限制在100个字符以内,但对于我正在做的事情来说,这已经足够了。

© www.soinside.com 2019 - 2024. All rights reserved.