ASP.Net Core Identity EF 5.0仅将用户还原到数据库



我正在使用Microsoft。AspNetCore。身份EntityFramework在我的Blazor服务器项目中,并对其进行了自定义,没有任何问题。我确实喜欢身份的简单性和稳健性;然而,由于我正在为部署进行开发,我遇到了一个小问题。在灾难恢复中,从MSSQL备份进行完全恢复可以顺利进行。如果您没有为已部署的Blazor服务器项目更改ApplicationDbContext中的任何内容,则这种类型的备份至关重要。因此,在灾难恢复到相同状态和DbContext的过程中,这是没有问题的,但如果您在DbContext中从一个安装到另一个安装有一个小的更改,或者说您正在升级Blazor服务器项目的前一版本,并更改上下文,您无法恢复用户,因为您只能使用以前的DbContext作为Db架构和设计进行完全还原。

如何恢复或更好地将日期从DBContext的一个实例迁移到另一个实例?我尝试从备份设备进行数据恢复,但由于用户表与用户声明和用户角色表之间存在外键,因此它不允许我进行恢复。外键约束不允许我恢复具有以前生成的GUID的用户,该GUID包含指向其他数据的重要信息链接。例如,一个表跟踪用户创建的事件,如果我重新创建用户,它的GUID与备份中注册的GUID不同。

任何帮助都将不胜感激。

如果您在表中查询ASPNetUsers,您会得到以下信息:

Id                                                                                                                                                                                                                                                               UserName                                                                                                                                                                                                                                                         NormalizedUserName                                                                                                                                                                                                                                               Email                                                                                                                                                                                                                                                            NormalizedEmail                                                                                                                                                                                                                                                  EmailConfirmed PasswordHash                                                                                                                                                                                                                                                     SecurityStamp                                                                                                                                                                                                                                                    ConcurrencyStamp                                                                                                                                                                                                                                                 PhoneNumber                                                                                                                                                                                                                                                      PhoneNumberConfirmed TwoFactorEnabled LockoutEnd                         LockoutEnabled AccessFailedCount
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- ---------------- ---------------------------------- -------------- -----------------
6cd26b55-b0c6-41ae-ac6c-ff9ae3242c3b                                                                                                                                                                                                                             userone@mymail.com                                                                                                                                                                                                                                               USERONE@MYMAIL.COM                                                                                                                                                                                                                                               userone@mymail.com                                                                                                                                                                                                                                               USERONE@MYMAIL.COM                                                                                                                                                                                                                                               1              AQAAAAEAACcQAAAAECp/NfxxEWw8fbd0jIrXOGZ/v/ggPscxMIINueP2dUQAihgRwrE1a+t1os/7MwvPCg==                                                                                                                                                                             OJP4HUHN6FNCXHXETVJTDQLC6RBUCLJS                                                                                                                                                                                                                                 f69a0ff7-9298-4d1f-8faa-e8ab3db3ab70                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                             0                    0                NULL                               1              0
9eda9ba1-dd47-4308-ba62-a19381a32d56                                                                                                                                                                                                                             usertwo@mymail.com                                                                                                                                                                                                                                               USERTWO@MYMAIL.COM                                                                                                                                                                                                                                               usertwo@mymail.com                                                                                                                                                                                                                                               USERTWO@MYMAIL.COM                                                                                                                                                                                                                                               1              AQAAAAEAACcQAAAAEFcXpQREt8sfhssYHlH/hRSlk3yX/bGMCYpXpTrid+YLNMFkDr5V45MnIo0JOPmWlw==                                                                                                                                                                             YLZJSYILLPQZBFGCOJLXKFZB64YXCHIK                                                                                                                                                                                                                                 c389b663-fcd1-4918-b9ed-54bc583666cc                                                                                                                                                                                                                             NULL                                                                                                                                                                                                                                                             0                    0                NULL                               1              0
(2 rows affected)

Completion time: 2021-08-06T14:19:46.8143727-07:00

由于Id是EF核心标识表生成的GUID,并且链接到其他ASPNetCore表,如UserRoles、UserClaims等,因此如何使用以前生成的旧GUID导入用户数据?

编辑2021年8月12日

我为这个问题找到了临时解决办法。出于解释的目的,我将使用APP、OriginalDB、BackedUpDevice(bak文件)、RestoredDB和NewDB。

OriginalDB我正在继续研究模型和ASP。Net Core/Blazor应用程序(APP),因此在ocassions上模型发生了变化。我有一个应用程序,当它第一次初始化时,如果数据库不存在,它会使用模型在服务器上创建数据库。我使用迁移来创建新模型,以便在第一次运行时将其放到服务器上。ASP。Net Core Identity有助于实现这一点。

因此,只有在APP中修改了模型,APP需要重新应用迁移时,才会出现原来的问题。我不使用后续迁移,因为一旦使用了OriginalDB,就会有数据,即使模型发生了变化,也需要复制数据。我对此完全没有意见。我可以从BackedUpDevice恢复到另一个数据库作为RestoredDB。然后,我使用RestoredDB将数据插入到NewDB中,NewDB是OriginalDB模式和APP中模型更改的新创建副本。因此,这给了我我的数据,但我不能将此方法用于ASP。Net Core Identity表,因为它使用外键。

我找到的解决办法是,我可以安全地删除ASP。Net Core标识表,即AspNetRoles、AspNetUserClaims、AspNetUserLogins、AspNetUserRoles和AspNetUsers,并将架构和表从RestoredDB复制到NewDB。虽然使用这种方法重新创建表是可行的,但我的问题是,我还修改了这些用户表,不仅更改了表名,还添加了自定义字段,如本文所示,在APP的未来迭代中,可能会有额外的自定义字段和/或更改影响这些表。因此,我需要了解如何将RestoreDB用户表数据(包括为具有外键的用户生成的GUID)复制到NewDB用户表。任何建议都将不胜感激。

我显然不了解你的所有情况,也根本不理解你解释的某些部分,但你概述的方法走错了路

EF Core 5.0迁移在创建、维护和应用方面具有很大的灵活性。您应该利用这些功能来完成您想要做的事情,而不是创建新的数据库并将数据复制到其中。

一些似乎适用于您的用例的示例:

  • 通过使用单独的迁移项目,您可能需要考虑进行两组不同的迁移-一组用于本地开发/迭代,另一组只进行迁移,将已发布的应用程序从一个版本迁移到下一个版本
  • 从"自定义迁移代码"中,解决您的自动迁移问题可能需要自定义自动生成的迁移代码。或者创建空迁移并编写完全自定义的代码来执行中间数据迁移步骤
  • 从排除模型的部分中,您可能需要排除一个DbContext中的某些对象,使其不包括在另一个DbContext[例如,如果您的Identity表来自与其他应用程序表不同的DbContext,但您引用了主应用程序的DbContext中中的Identity实体]

最新更新