将现有 Microsoft.AspNet.Identity DB (EF 6) 迁移到 Microsoft.AspNetCore.Identity (EF Core)

Posted

技术标签:

【中文标题】将现有 Microsoft.AspNet.Identity DB (EF 6) 迁移到 Microsoft.AspNetCore.Identity (EF Core)【英文标题】:Migrate existing Microsoft.AspNet.Identity DB (EF 6) to Microsoft.AspNetCore.Identity (EF Core) 【发布时间】:2018-10-24 21:25:19 【问题描述】:

我正在开发一个使用 Microsoft.AspNet.Identity 的应用程序 (APS.net MVC)。现在我想将我的应用程序改造成使用 Microsoft.AspNetCore.Identity 的 APS.net Core。但是这两个在每个模型中都有一些差异。是否有任何直接的方法可以为 Microsoft.AspNetCore.Identity 相关更改生成初始迁移,以便将现有数据库与 Asp.net Core 身份连接?

【问题讨论】:

【参考方案1】:

我能够使用以下步骤迁移现有数据库。

    创建一个新的 ASP.net Core 项目并将其修改为 ModelSnapshot 以匹配 EF6。之后,您可以为 EF6 到 EF Core 的更改生成脚本。

    编写脚本来更新 AspNetUsers 表。在 ASP.net 核心标识中进行身份验证时使用NormalizedEmailNormalizedUserName 列。所以我们需要使用我们现有的数据更新这两列。

希望这对那里的人有所帮助...

请关注this GitHub 线程以获取更多信息。

【讨论】:

【参考方案2】:

这里有一个完整的explanation 关于 asp.net core 3.0 以及如何将您的数据库迁移到 asp.net core identity 3.0 db。

通读一遍,希望对遇到它的人有所帮助。

【讨论】:

【参考方案3】:

我将“完整”身份数据库转换为核心身份。我的情况可能不适合你。我使用 EF 迁移。我只使用用户和角色功能。我使用了这些步骤:

复制数据库

删除 Identity 相关表和 MigrationHistory...

如果存在 AspNetRoleClaims 则删除表 如果存在 AspNetUserTokens 则删除表 如果存在 AspNetUserClaims 则删除表 如果存在 AspNetUserRoles 则删除表 如果存在 AspNetUserLogins 则删除表 如果存在 AspNetUserClaims 则删除表 如果存在 AspNetRoles,则删除表 如果存在 AspNetUsers,则删除表 如果存在 __EFMigrationsHistory 则删除表

允许 Identity Core 迁移运行,创建 Core Identity 首选的新表

从旧数据库复制身份数据

--复制用户数据

insert into AspNetUsers(Id, UserName, NormalizedUserName, Email, NormalizedEmail,
    EmailConfirmed, PasswordHash, PhoneNumberConfirmed, TwoFactorEnabled, LockoutEnabled, AccessFailedCount
    )
    select Id, UserName, UPPER(UserName), Email, UPPER(Email), 
    1, PasswordHash, 0, 0, 0, 0 from [OldDatabase].dbo.AspNetUsers

--复制角色

insert into AspNetRoles(Id, [Name], NormalizedName)
     select Id, [Name], UPPER([Name]) from [OldDatabase].dbo.AspNetRoles

--复制用户/角色

insert into AspNetUserRoles select * from [OldDatabase].dbo.AspNetUserRoles

我不使用任何其他表。我把它们留空了。

【讨论】:

以上是关于将现有 Microsoft.AspNet.Identity DB (EF 6) 迁移到 Microsoft.AspNetCore.Identity (EF Core)的主要内容,如果未能解决你的问题,请参考以下文章

将本地现有目录连接到现有 Git 远程存储库

您可以将现有表添加到 MySQL Workbench 中的现有模型吗?

将 varbinary 更新到现有 SQL 列(添加到现有图像)?

将应用与现有主页连接

将数据从现有行复制到 SQL 中的另一现有行?

将现有 AWS 资源整合到 CloudFormation 堆栈中