【Abp VNext】实战入门(九):DbMigrator 自定义项目所需种子数据

article/2025/8/30 4:43:32

前言:

项目开发过程中难免会涉及到一些业务相关的基础数据,我们称之为种子数据,主要为了方便测试功能或者展示效果;

常规做法是手动到数据库表创建数据,但是随着表结构更改或者数据清空后,又要重新录入基础数据,很是麻烦;

采用CodeFirst 通过建模领域对象生成实体表结构的方式,为了便于种子数据的存储和管理,一个好的解决方案显得极为重要,Abp Vnext 项目模板中xxx.ProjectName.DbMigrator 项目就是用于种子数据初始化到数据库的控制台程序;

具体步骤:

1、 在xxx.Domain领域服务中的 data目录下 新建 DefaultDataSeederContributor.cs 用于存放种子数据:
在这里插入图片描述

public class DefaultDataSeederContributor : IDataSeedContributor, ITransientDependency{public readonly IRepository<Resource,string> _resources;public DefaultDataSeederContributor(IRepository<Resource,string> resources){_resources = resources;}public async Task SeedAsync(DataSeedContext context){//1、初始化静态资源Resource数据await CreateResourceDataAsync();//2、初始化其他数据库表数据******}/// <summary>/// Resource表静态资源初始化/// </summary>/// <returns></returns>private async Task CreateResourceDataAsync(){//1、清空所有数据//await _resources.DeleteAsync(p => p.Id == "CruiseType"); //删除无效 不知为何//2、提取种子数据var tmpDataLst = GetResourceData();//3、循环插入数据foreach (var item in tmpDataLst){            var tmpEntity =  await  _resources.FirstOrDefaultAsync(p => p.Id == item.Id);if (tmpEntity != null){//数据当前数据存在删除当前记录DeleteAsync(tmpEntity);//如果 继承了软删除 ISoftDelete 则需要调用 强制删除:HardDeleteAsync(tmpEntity) ;await _resources.HardDeleteAsync(tmpEntity);}await _resources.InsertAsync(item); }            }/// <summary>/// Resource静态资源配置/// </summary>/// <returns></returns>private List<Resource> GetResourceData(){List<Resource> tmpDataLst = new List<Resource>();//1、任务资源类型:tmpDataLst.AddRange(new List<Resource>{new  Resource() {Id="CruiseType",Name="巡检类型"},new  Resource() {Id="CruiseType_Preset",Name="预置巡航"},new  Resource() {Id="CruiseType_Area",Name="区域巡航"}});return tmpDataLst;}}

2、xxx.ProjectName.DbMigrator 项目 xxxModule.cs 模块类中添加种子数据类:

public class GasMonitoringDbMigratorModule : AbpModule{public override void ConfigureServices(ServiceConfigurationContext context){Configure<AbpBackgroundJobOptions>(options => options.IsJobExecutionEnabled = false);          // Remove the contributor for migrator modulecontext.Services.RemoveAll(t => t.ImplementationType == typeof(IDataSeedContributor));// Add custom data seed contributorcontext.Services.AddTransient<IDataSeedContributor, DefaultDataSeederContributor>();}}

3、启动xxx.ProjectName.DbMigrator项目,即可将数据初始化到数据库;
4、或者控制台管理程序 cd 到DbMigrator项目 调用 dotnet run 命令

总结:

这样种子数据就跟着项目走了,便于管理更改和重复使用;


http://chatgpt.dhexx.cn/article/6Tra5sR7.shtml

相关文章

区块链模块化的大胆尝试,解读公链Celestia

作为以链游为主的社区&#xff0c;暴躁兔也会时常关注加密行业的其他赛道和方向。对于目前市场而言&#xff0c;公链的机会与红利仍然存在&#xff0c;且相对而言&#xff0c;技术创新较多&#xff0c;同时资本也比较喜欢这样的赛道。今天为大家讲解的是Cosmos生态的项目Celest…

scrapy_redis种子优化

前言&#xff1a; 继《scrapy_redis去重优化&#xff08;已有7亿条数据&#xff09;&#xff0c;附Demo福利》优化完去重之后&#xff0c;Redis的内存消耗降了许多&#xff0c;然而还不满足。这次对scrapy_redis的种子队列作了一些优化&#xff08;严格来说并不能用上“优化”…

总结一下Python的模块加载解析

正式的Python专栏第16篇&#xff0c;同学站住&#xff0c;别错过这个从0开始的文章&#xff01; 学委之前分享了很多代码&#xff0c;也发布了几个库。 新手可以从两篇基础文章入手学习&#xff0c;积累了一些代码&#xff0c;可以考虑做成一个个模块&#xff0c;包装代码有利…

C++ 函数(模块化编程)

目录 函数定义 函数 函数定义的语法形式 函数调用 调用函数需要先声明函数原型 函数调用形式 嵌套调用 例3-1编写一个求x的n次方的函数 例3-2 数制转换 源代码&#xff1a; 例3-3 编写程序求π的值 arctan函数 主程序 例3-4 寻找并输出11~999之间的数M&#xf…

单片机常开常闭检测

单片机检测常开常闭点&#xff08;干接点信号&#xff09;的方法&#xff1a;检测干接点的闭合和断开&#xff0c;从而单片机实施一定的操作&#xff0c;它具有两根线&#xff0c;具体步骤&#xff1a;1、引出单片机一个IO口线&#xff0c;连接干接点一端。2、干接点另一端通过…

干海星怎么吃做法 干海星的功效与作用有哪些

干海星是生活中并不常见的一种海鲜类食材&#xff0c;在很多人眼中干海星都是一种中药材&#xff0c;其实它也可以当做一种菜品来食用&#xff0c;那么干海星应该怎么吃呢&#xff1f;接下来我就把自己总结的干海星吃法大全写出来分享给大家。 干海星怎么吃 干海星的功效与作用…

大前端干货资料

JavaScript 文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference ES6 入门教程&#xff1a;https://es6.ruanyifeng.com/ Vue 官网&#xff1a;https://cn.vuejs.org router 官网&#xff1a;https://router.vuejs.org/zh UI框架 Ele…

干簧管(磁开关)

其实干簧管的工作原理并不复杂 干簧管的特点&#xff1a; 干簧管是干式舌簧管的简称&#xff0c;是一种有触点的无源电子开关元件&#xff0c;具有结构简单&#xff0c;体积小便于控制等优点&#xff0c;其外壳一般是一根密封的玻璃管&#xff0c;管中装有两个铁质的弹性簧片…

苹果手机位置共享后没开启定位服务器,iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电...

原标题&#xff1a;iPhone默认开启但无卵用的设置开着干嘛&#xff1f;难怪手机这么耗电 如果你的苹果手机开启了定位功能&#xff0c;那么在iPhone【设置】-【隐私】-【定位服务】-系统服务】&#xff0c;点击进入后有很多项开关&#xff0c;而很多都是在打开定位服务后默认开…

adams打不开提示msc license_adams安装后打不开

虽然要支持正版……但是 安装后打不开&#xff0c;借鉴了adams2017安装教程后台留言 图片发自简书App 1.首先我这么做是因为其实在安装过程中就有一次没找到路径 。所以该方法仅供参考。 图片发自简书App 此时我直接在“此电脑”内搜索“MSC.Software”了 图片发自简书App 耐心…

使用Arduino开发板连接干簧管(Reed Switch)的方法

topic 1.干簧管&#xff08;Reed Switch&#xff09;干簧管的特点&#xff1a;模块使用说明&#xff1a;干簧管有两种常见的类型&#xff1a;干簧管常见的应用需要的组件代码 1.干簧管&#xff08;Reed Switch&#xff09; 干簧管&#xff0c;又称磁力开关或磁簧开关&#xff0…

查看电脑使用日志------电脑干了些什么,别人是否动了你的电脑

** 现在我们都有了电脑&#xff0c;有时候短暂的离开可能会有人偷偷的查看你的电脑&#xff0c;有意无意的&#xff0c;总是会感觉心里不是很踏实&#xff0c;那么怎么知道自己的电脑有没有被别人偷偷的查看呢&#xff0c;下面我们通过一些列操作查看电脑是否被别人动过&#x…

高版本envi打不开Landsat8 C2L2数据解决教程

引申部分不写&#xff0c;直接开干 首先找到你的Landsat8 C2L2数据 进入后将首行GROUP LANDSAT_METADATA_FILE改为GROUP L1_METADATA_FILE 编辑—查找—GROUP LEVEL1_PROCESSING_RECORD&#xff0c;查找下一处可得该区域总和 将 GROUP LEVEL1_PROCESSING_RECORD 到 END_…

【错误记录】Melodyne 报错 ( 无法打开音频文件 )

文章目录 一、报错信息二、修改音源格式三、继续使用 Melodyne 打开 一、报错信息 打开一个 48000Hz , 立体声音源 , 采样位数 32 位的采样 , 无法打开 , 报下面的错误 ; 这是用 Bandicam 录制的音频 , 感觉有点问题 , 之后使用 Au 录制音频 ; 二、修改音源格式 在 Adobe Audit…

带你了解测开

测开——测试开发工程师 测试开发工程师 (Software Development Engineer in Test,简称SDET&#xff09;是指那些既可以称作是开发人员&#xff0c;同时也负责软件开发阶段和测试周期的测试工作的技术人员。一个专业的SDET更关注软件产品的可测性&#xff0c;稳健性和性能。他…

开干,开源 k8s 负载均衡器大比拼

原文链接&#xff1a;https://ewhisper.cn/posts/29610/ &#x1f9e0; 译者声明&#xff1a; 请注意文章发布时间&#xff0c;时间比较久远&#xff0c;部分观点可能已经过时。原文作者为 PureLB 的利益相关者&#xff0c;所以本文可能不尽客观。 词汇表 英文中文备注LoadBala…

开干!Elasticsearch官方文档离线访问实操指南

Elasticsearch 最少必要知识实战教程直播回放 1、开发不能联网怎么访问Elasticsearch文档&#xff1f; 这是最近被频繁问到的问题。直接上个图&#xff1a; 不能让 Elasticsearch 文档限制了你我的学习热情&#xff01; 2、直接开干 步骤1&#xff1a;访问&#xff1a;https://…

开干!

阅读本文大概需要 2.6 分钟。 很多人知道&#xff0c;我自由了&#xff0c;但很多人会误以为自由就是在家混吃等死&#xff0c;那人生得多没意思&#xff0c;我也有自己的事要做的&#xff0c;只是会自主安排时间&#xff0c;自主决策事情而已&#xff0c;下周开始&#xff0c;…

python中读写Protobuf总结

Protobuf是谷歌开源的协议框架&#xff0c;以高效传输著称并且支持多种语言。工作中也用到了&#xff0c;在此做个总结。 Protobuf运行原理 下面一张图可以说明&#xff1a; Python中使用Protobuf 2.1安装protoc程序 protoc --version 我安装的是3.6.1版本 2.2定义协议 syntax …

protobuf 入门

参考自 https://juejin.cn/post/7029961388411846664 介绍了protobuf基本概念、优缺点、与protobuf在C上的基本使用 1. 什么是protobuf 它是一个灵活、高效、结构化的序列化数据结构&#xff0c;它与传统的XML、JSON等相比&#xff0c;它更小、更快、更简单。 ProtoBuf是由…