【问题标题】:ASP.Net Core Identity EF 5.0 restore only users to databaseASP.Net Core Identity EF 5.0 仅将用户还原到数据库
【发布时间】:2021-08-06 19:55:06
【问题描述】:

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

如何恢复,或者更好的是,将日期从 DBContext 的一个实例迁移到另一个实例?我尝试从备份设备进行数据还原,但由于用户表与用户声明和用户角色表之间的外键,它不允许我进行还原。外键约束不允许我使用先前生成的 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 Core 身份表生成的 GUID,并且链接到其他 ASPNetCore 表,例如 UserRoles、UserClaims 等,我如何使用之前生成的旧 GUID 导入用户数据?

2021 年 8 月 12 日编辑

我找到了解决此问题的临时解决方法。为了便于说明,我将使用 APP、OriginalDB、BackedUpDevice(bak 文件)以及 RestoredDB 和 NewDB。

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

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

我发现的解决方法是,我可以安全地删除 ASP.Net Core Identity 表,即 AspNetRoles、AspNetUserClaims、AspNetUserLogins、AspNetUserRoles、AspNetUsers,并将模式和表从 RestoredDB 复制到 NewDB .虽然使用这种方法重新创建表是可行的,但我遇到的问题是我还修改了这些用户表,不仅更改了表名,而且还添加了主要在This Article 中显示的自定义字段,在 APP 的未来迭代中,有可能是影响这些表的其他自定义字段和/或更改。因此,为什么我需要查看如何将 RestoreDB 用户表数据,包括为具有外键的用户生成的 GUID 复制到 NewDB 用户表。任何建议将不胜感激。

【问题讨论】:

    标签: sql-server entity-framework-core blazor-server-side database-administration asp.net-core-5.0


    【解决方案1】:

    我显然对你的情况一无所知,我也完全不明白你解释的某些部分,但是你所概述的方法走错了路。

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

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

    • Using a Separate Migrations Project 开始,您可能需要考虑进行两组不同的迁移 - 一组用于本地开发/迭代,另一组仅具有将已发布应用程序从一个版本转移到下一个版本的迁移
    • 来自Customize migration code,解决自动迁移问题可能涉及自定义自动生成的迁移代码。或者创建空迁移并编写完全自定义的代码来执行中间数据迁移步骤
    • Excluding parts of your model 开始,您可能需要将一个 DbContext 中的某些对象排除在另一个 DbContext 的迁移中(例如,如果您的 Identity 表来自与应用程序表的其余部分不同的 DbContext,但是您在主应用的 DbContext 中引用 Identity 实体)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-12
      • 2021-07-25
      • 2020-07-21
      • 2019-03-16
      • 2018-01-08
      • 2021-09-08
      • 1970-01-01
      • 2020-07-06
      相关资源
      最近更新 更多