迁移现有用户数据到ABP vNext

这篇具有很好参考价值的文章主要介绍了迁移现有用户数据到ABP vNext。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始。对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移。

老的项目,随着规模越来越大,每次修改都需要更改非常多地方,最重要的是,共用数据库使得维护起来需要小心翼翼。为了后续维护方便,我们可以使用 ABP 进行拆分,并将一个个子功能拆成独立的解决方案,独立进行部署。

数据库基于 postgresql。

迁移数据库

老系统建立于 ASP. NET CORE 3.1 时代,使用的是 ASP. NET Identity 这个东西,而 ABP 的用户管理系统也是基于 ASP. NET Identity 的,因此理论上来说可以平滑迁移。
有关用户权限与角色的一共有三个表:

  • AbpUserRoles:记录用户与角色的映射
  • AbpUsers :用户表
  • AbpRoles:角色表

实际上数据库表还是有一些区别,并不能直接进行平滑迁移,举几个例子:

  1. ABP 的 Id 字段为 uuid 类型,Identity 为 string 类型。
  2. ABP 多了一些与多租户管理相关的字段。
  3. ABP 多了一些的标识默认的字段,并且不可为 null。
  4. ABP 7.2中用户表的 Email 是不可为空列,而老版的 Identity 并不是(新版的也是)。

需要先对 User 和 Role 进行同步,然后再同步映射表。先将原来系统内的数据导出为 SQL,直接执行同步语句以同步 User 表:

INSERT INTO "public"."AbpUsers"("Id", "UserName", "NormalizedUserName", "Email", "NormalizedEmail", "EmailConfirmed", "PasswordHash", "SecurityStamp", "ConcurrencyStamp", "PhoneNumber", "PhoneNumberConfirmed", "TwoFactorEnabled", "LockoutEnd", "LockoutEnabled", "AccessFailedCount") VALUES ('a9700c52-448c-bc3a-277bc95c15cb', 'USRDEMO', 'USERDEMO', NULL, NULL, 'f', 'AQAAAAEAACcQHnDh6dl+2xH9ld+XTlqKWQZNaBzhOXIAEzdQ', 'XXOBEMERW572TSLVMBSX56XI7LF', '4dad1c39-7c7e-466c-02b5d75bb006', NULL, 'f', 'f', NULL, 't', 0);

肯定是不能正常通过的,提示 Email 不能为空。

处理 Email 字段

在 2019 年之前,Email 字段还不是必填项目,后来改成了的必填的项。但是这个习惯不是很符合国人的习惯,很多系统有个手机号也能注册。

我翻到了 github 上面的一个 issue,作者给出了以下解决方案:

  • 首先修改数据库表格定义,确保数据库能够接受 null 值。
modelBuilder.Entity<IdentityUser>(entity =>
{
        entity.Property(p => p.Email).IsRequired(false);
        entity.Property(p => p.NormalizedEmail).IsRequired(false);
});
  • 其次修改 IdentityUserStore,在处理用户时,不会对 null 值弹出异常。(找一下哪个引用了 AbpIdentityDomainModule,通常在领域模块)
    [Dependency(ReplaceServices = true)]
    public class MyIdentityUserStore: IdentityUserStore
    {
        public MyIdentityUserStore(IIdentityUserRepository userRepository, IIdentityRoleRepository roleRepository, IGuidGenerator guidGenerator, ILogger<IdentityRoleStore> logger, IdentityErrorDescriber describer = null) : base(userRepository, roleRepository, guidGenerator, logger, describer)
        {
        }

        /// <summary>
        /// Sets the <paramref name="email" /> address for a <paramref name="user" />.
        /// </summary>
        /// <param name="user">The user whose email should be set.</param>
        /// <param name="email">The email to set.</param>
        /// <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken" /> used to propagate notifications that the operation should be canceled.</param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public override Task SetEmailAsync(IdentityUser user, string email, CancellationToken cancellationToken = new CancellationToken())
        {
            cancellationToken.ThrowIfCancellationRequested();

            Check.NotNull(user, nameof(user));
            var t = typeof(IdentityUser);
            t.GetProperty(nameof(IdentityUser.Email))
                .SetValue(user, email, null);

            return Task.CompletedTask;
        }
    }

	public override void ConfigureServices(ServiceConfigurationContext context)
	{
	        ...
	       context.Services.Replace(ServiceDescriptor.Scoped<IdentityUserStore, MyIdentityUserStore>());
	}

处理其他字段

其他字段主要是一个默认值的问题,直接设置就可以了:

            entity.Property(p => p.IsActive).HasDefaultValue(true);
            entity.Property(p => p.CreationTime).HasDefaultValue(DateTime.Now);

处理完这个表之后的,执行 update-database,就可以正常执行 SQL 插入了。按照同样的方法处理 AbpRoles 表,最后同步 AbpUserRoles 就完成了。

其实我推荐另外一种方法:直接在数据库上设置默认值,然后导入,最后恢复原来的表结构,这样还不容易有副作用。

验证

启动 Auth 项目(如果是 Tired),用原来的用户名与密码调用,得到以下结果,完成迁移。

迁移现有用户数据到ABP vNext文章来源地址https://www.toymoban.com/news/detail-487821.html

到了这里,关于迁移现有用户数据到ABP vNext的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Abp Vnext 搭建 ELK日志记录

    ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana 安装 Elasticsearch Kibana 的方法我前面文章有写 Abp中加入Logstash Kibana 查看日志 kibana新建索引 logstash-* 然后点击下一步即可 我这边是已经创建完毕了 查看日志 这样咱们就完成ELK 的初步搭建和 后续学习 ES ,因为一个

    2024年02月08日
    浏览(35)
  • OData WebAPI实践-与ABP vNext集成

    本文属于 OData 系列文章 ABP 是一个流行的 ASP. NET 开发框架,旧版的的 ABP 已经能够非常好的支持了 OData ,并提供了对应的 OData 包。 ABP vNext 是一个重新设计的,面向微服务的框架,提供了一些非常有用的特性,包括分页查询等但是它并不能原生支持 OData ,我们需要自行实现

    2024年02月04日
    浏览(37)
  • Abp Vnext 动态(静态)API客户端源码解析

    根据以往的经验,通过接口远程调用服务的原理大致如下: 服务端:根据接口定义方法的签名生成路由,并暴露Api。 客户端:根据接口定义方法的签名生成请求,通过HTTPClient调用。 这种经验可以用来理解ABP VNext自动API的方式,但如果不使用自动API并且控制器定义了路由的情

    2024年02月06日
    浏览(56)
  • abp Vnext OpenIddect 扩展微信小程序授权登录

    abp vnext6.0之后官方替换了原来的ids4,采用了openIddict的oauth认证框架。使用之前的方法已经不行,以下是OpenIddect 使用ITokenExtensionGrant接口进行的授权登入扩展,按照以下代码可实现,欢迎交流指正。 使用上面定义的ExtensionGrantName扩展的这个openiddict的认证流程的名字 钉钉可参

    2024年02月10日
    浏览(28)
  • MySQL使用存储过程迁移用户表数据,过滤用户名相同名称不同的用户

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。它是一段预编译的SQL代码,可以被多次调用,不需要每次都重新编写SQL语句,非常适合用于大量重

    2024年02月06日
    浏览(42)
  • 迁移Linux服务器用户数据(将一个服务器的Linux用户数据迁移到另一个Linux服务器用户的流程)

    先来到根目录,再使用tar命令打包数据: tar czvf root.zip.gz ./* 在根目录使用指令: scp 打包好的数据 用户@ip:目的用户下的某个目录 源Linux服务器用户 : 查看压缩包是否到达: 对收到的数据进行解压,使用指令 tar xzvf root.zip.gz 解压到当前目录下。 目的Linux服务器用户 : 看到

    2024年02月08日
    浏览(50)
  • 2022 年 MathorCup 高校数学建模挑战赛——大数据竞赛(北京移动用户体验影响因素研究高级版代码(迁移学习+kmeas聚类强特征生成))

    赛道 B:北京移动用户体验影响因素研究 移动通信技术飞速发展,给人们带来了极大便利,人们也越来越离不开移动通信技术带来的各种便捷。随着网络不断的建设,网络覆盖越来越完善。各个移动运营商,越来越重视客户的网络使用体验,从而进一步提升网络服务质量。客

    2024年02月13日
    浏览(49)
  • Keras可以使用的现有模型

    官网:https://keras.io/api/applications/ 一些使用的列子:  ResNet50:分类预测 VGG16:用作特征提取器时,不需要最后的全连接层,所以实例化模型时参数  include_top=False 网上例子解释: VGG19: Fine-tune InceptionV3:微调训练一个新类别 Build InceptionV3:自定义tensor,输入V3

    2024年02月19日
    浏览(33)
  • GEE——sentinel-2新的去云方式(Cloud Score+ S2_HARMONIZED V1数据集)及linkCollection()函数的使用,结果优于现有QA波段去云(附代码)

    GEE今天的峰会上提出了一个非常好的去云的影像,这个数据集已经再gee中进行了公开,并且只需要通过一行代码即可运行获取没有云的高清影像,相较于QA去云的操作,整体山给效果更加,特别是对于很多地区常年被云雾覆盖,很难获取无云影像,本教程通过一个简单的案例

    2024年02月05日
    浏览(60)
  • Elasticsearch数据迁移(使用快照)

    前言 :由于做项目的时候没有进行长期考虑,把es,mysql,api等都部署在同一台服务器上,随着业务的增加,需要将部分服务和存储迁移到其他服务器。es上目前已有100万以上的数据,上网查资料,snapshot适合数据量大的迁移,所以没来得及考虑就果断选择尝试一下。 一.生成

    2024年04月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包