最近在用abp开发项目,需要将如下区域数据通过程序的初次运行种入数据库。
不知道大家是怎么去管理数据库跟后台程序的同步的,基于git的数据库sql文件的管理——完美解决团队sql操作协同问题,此文是我以前的一个思考。
但是有三个缺点:
备注本文用的abp框架为第一代,官网:。 模板下载运行方法(前后端分离)可以参照此文abp框架运行——前后端分离(基于vue)。
本文执行方法参照的是abp框架的默认语言种子数据种入。
//初始化区域数据的引用 public list<area> initialarea => getinitialarea(); /// <summary> /// 初始化数据 /// </summary> /// <returns></returns> private list<area> getinitialarea() { return new list<area> { new area(110000,"北京市", 0, 1), new area(110101,"东城区", 110100, 3), new area(110102,"西城区", 110100, 3) }; }
构造函数,通过依赖注入容器拿到数据库上下文。
//pems系统数据库上下文 private readonly pemsdbcontext _context; /// <summary> /// 构造函数,通过依赖注入容器拿到数据库上下文 /// </summary> /// <param name="context"></param> public defaultareacreator(pemsdbcontext context) { _context = context; }
对依赖注入不明白的道友,可以参照此文 在net core3.1上基于winform实现依赖注入实例
/// <summary> /// 封装调用 创建初始化数据列表方法,这样上层调用看上去格式一致 /// </summary> public void create() { createarea(); } /// <summary> /// 创建初始化数据列表方法 /// </summary> private void createarea() { foreach (var area in initialarea) { addareaifnotexists(area); } }
遍历初始区域表,将数据加入到数据库中去。
通过数据库上下文,获取数据库中的区域id区域名称。与初始化数据对比,丢失的数据,添加到数据库里去。
/// <summary> /// 某个区域记录缺失时,将该记录重新种入数据库进行持久化 /// </summary> /// <param name="area"></param> private void addareaifnotexists(area area) { if (_context.area.ignorequeryfilters().any(a => a.id== area.id && a.areaname == a.areaname)) { return; } _context.area.add(area); _context.savechanges(); }
数据库中没有数据或者缺失某条或者某几条记录。结果都是如下初始数据。
位于项目的领域层。
/// <summary> /// area实体类 /// </summary> public class area : entity<long> { public area() { } public area(int id, string areaname, int parentid, int level) { this.id = id; this.areaname = areaname; this.parentid = parentid; this.level = level; } [stringlength(20)] public string areaname { get; set; } public int parentid { get; set; } public int level { get; set; } }
public area(int id, string areaname, int parentid, int level) { this.id = id; this.areaname = areaname; this.parentid = parentid; this.level = level; }
public area() { }
如对本文有疑问, 点击进行留言回复!!
Asp.Net Core Identity 骚断腿的究极魔改实体类
你一定看得懂的 DDD+CQRS+EDA+ES 核心思想与极简可运行代码示例
网友评论