当前位置: 首页 > news >正文

深圳装饰网站建设ps做网站好看的logo

深圳装饰网站建设,ps做网站好看的logo,开网站要多少钱,一键生成装修效果图app#xff08;好雨知时节#xff0c;大雨 _ _ _#xff09;时不时的呢#xff0c;会有小伙伴问我这样的问题#xff1a;1、群主#xff0c;你的.tsv文件是如何生成的#xff1f;2、在线项目数据和种子数据的不一样#xff0c;可以下么#xff1f;3、如果我本地的数据开发… 好雨知时节大雨 _ _ _时不时的呢会有小伙伴问我这样的问题1、群主你的.tsv文件是如何生成的2、在线项目数据和种子数据的不一样可以下么3、如果我本地的数据开发好了如何把新的数据迁到生产环境呢01PART设计思路这几个问题还是问了一段时间后我感觉是时候需要考虑考虑了之前一直比较懒或者没有很好的办法去处理这个问题其实今天的办法也不是最完美的所以我叫思路一如果有好的思路欢迎留言和建议有奖励哟。今天就暂时先说说这个简单的方案吧比较简单就是把数据从一个DB迁到另一个DB然后增加一个输出tsv的功能看似很简单还是用到了一些知识点的1、多表联合这个是基础任何ORM都支持2、读写分离但是有2个前提下文会具体说3、事务处理保证数据一致性嘛那下边就具体说说如何来实现。02PART开发流程代码不是很多相信一遍就能看懂。1、获取集合内完整数据这里用到了多表联合查询毕竟SqlSugar不像EFCore那样可以一次性就把子属性给全部查询出来感觉就像聚合一样那在SqlSugar中的写法有两种官方默认的是Mapper好一些/// summary /// 查询出角色-菜单-接口关系表全部Map属性数据 /// /summary /// returns/returns public async TaskListRoleModulePermission GetRMPMaps() {return await Db.QueryableRoleModulePermission().Mapper(rmp rmp.Module, rmp rmp.ModuleId).Mapper(rmp rmp.Permission, rmp rmp.PermissionId).Mapper(rmp rmp.Role, rmp rmp.RoleId).Where(d d.IsDeleted false).ToListAsync(); } PS这里我不想再讨论各种ORM的孰优孰劣了那是小孩纸才会干的事儿我项目EFCore也用Dapper也会就酱吧。2、开启数据库读写分离模式既然要数据库迁移肯定是需要一个DB转移到另一个DB因为我们的项目正好已经实现了读写分离模式那正好利用这个机制主库为写所以配置为新库从库为读所以配置为旧库。结果是这样的这里要注意四点1、既然要迁移数据那新库只生成表结构就行不用初始化数据False2、设置主库的ConnID3、开启CQRSEnabled开关并配置主从库地址4、主从库数据库类型一致不然会报错毕竟不是多库模式千万记得新库是用来写的所以是主库。那最后启动项目结果是这样的3、开始迁移万事俱备只欠东风了这一步就是要迁移数据逻辑了。其实整个项目核心的就是权限聚合部分了涉及到了四个表角色表、菜单表、接口表、关系表。因为系统用的是整型的自增主键ID所以要考虑好关系表中rid、mid、pid的值要与对应表的id是一致的如果你一直用的的GUID字符串的话就不用考虑这个问题无脑的数据迁移就行.那现在要保证关系表的id问题我是这么写的在MigrateController.cs中 /// summary/// 获取权限部分Map数据从库/// 迁移到新库主库/// /summary/// returns/returns[HttpGet]public async TaskMessageModelstring DataMigrateFromOld2New(){var data new MessageModelstring() { success true, msg };if (_env.IsDevelopment()){try{// 获取权限集合数据 var rmps await _roleModulePermissionServices.GetRMPMaps();// 当然你可以做个where查询//rmps rmps.Where(d d.ModuleId 88).ToList();// 开启事务保证数据一致性_unitOfWork.BeginTran();var rid 0;var pid 0;var mid 0;var rpmid 0;// 注意信息的完整性不要重复添加确保主库没有要添加的数据foreach (var item in rmps){// 角色信息防止重复添加做了判断if (item.Role ! null){var isExit (await _roleServices.Query(d d.Name item.Role.Name d.IsDeleted false)).FirstOrDefault();if (isExit null){rid await _roleServices.Add(item.Role);Console.WriteLine($Role Added:{item.Role.Name});}else{rid isExit.Id;}}// 菜单if (item.Permission ! null){pid await _permissionServices.Add(item.Permission);Console.WriteLine($Permission Added:{item.Permission.Name});}// 接口if (item.Module ! null){mid await _moduleServices.Add(item.Module);Console.WriteLine($Module Added:{item.Module.LinkUrl});}// 关系if (rid 0 pid 0 mid 0){rpmid await _roleModulePermissionServices.Add(new RoleModulePermission(){IsDeleted false,CreateTime DateTime.Now,ModifyTime DateTime.Now,ModuleId mid,PermissionId pid,RoleId rid,});Console.WriteLine($RMP Added:{rpmid});}}_unitOfWork.CommitTran();data.success true;data.msg 导入成功;}catch (Exception){_unitOfWork.RollbackTran();}}else{data.success false;data.msg 当前不处于开发模式代码生成不可用;}return data;} 逻辑很简单就是获取到整体数据后一个个添加到新库里然后再添加关系表保证数据的完整性然后用事务如果出错可以回滚保证一致性。4、查看结果到了这里基本就没有问题了可以看到数据已经完成了迁移迁移过程输出到控制台数据库查看新库已经有了数据这里完全不用胆小你的生产数据库是否已经有数据了无论有没有添加的权限关系表的id也一定会和三个子表是一一对应的且id自增没问题。关于其他用户表博客表肯定不需要迁移吧这些本地环境肯定是没有的。那迁移完了数据如何生成到tsv文件里呢请往下看。03PART输出到文件那现在我们的新库有了数据我们就可以切换到单库模式来从新库里获取数据然后生成到tsv文件里 [HttpGet]public async TaskMessageModelstring SaveData2TsvAsync(){var data new MessageModelstring() { success true, msg };if (_env.IsDevelopment()){try{// 取出数据序列化自己可以处理判空var rolesJson JsonConvert.SerializeObject(await _roleServices.Query(d d.IsDeleted false));FileHelper.WriteFile(Path.Combine(_env.WebRootPath, BlogCore.Data.json, Role_New.tsv), rolesJson, Encoding.UTF8);var permissionsJson JsonConvert.SerializeObject(await _permissionServices.Query(d d.IsDeleted false));FileHelper.WriteFile(Path.Combine(_env.WebRootPath, BlogCore.Data.json, Permission_New.tsv), permissionsJson, Encoding.UTF8);var modulesJson JsonConvert.SerializeObject(await _moduleServices.Query(d d.IsDeleted false));FileHelper.WriteFile(Path.Combine(_env.WebRootPath, BlogCore.Data.json, Modules_New.tsv), modulesJson, Encoding.UTF8);var rmpsJson JsonConvert.SerializeObject(await _roleModulePermissionServices.Query(d d.IsDeleted false));FileHelper.WriteFile(Path.Combine(_env.WebRootPath, BlogCore.Data.json, RoleModulePermission_New.tsv), rmpsJson, Encoding.UTF8);}catch (Exception){}data.success true;data.msg 生成成功;}else{data.success false;data.msg 当前不处于开发模式代码生成不可用;}return data;} 结果我就不展示了自己试试就可以了。思考与总结从上边的代码中我们可以看出来因为框架已经集成了很多重要的功能比如读写分离和事务处理所以代码还是比较简单的如果自己从0开始写还是比较麻烦的。现在还有一个问题需要思考下如果实现不同类型数据库的生成这里也是两种办法1、使用框架的多库模式先从库1获取数据然后切换数据库再生成到库22、可以生成到tsv文件里做个跳板这不过这里有一个问题就是关系表的id如果不一样一定会混乱的所以这个时候又说到了主键用INT还是GUID的问题了自己处理吧。还是欢迎大家多多提意见吧如何对业务数据进行同步迁移是一个好课题。
http://www.pierceye.com/news/221414/

相关文章:

  • 常熟网站网站建设电商购物平台软件开发
  • 网站页尾信息网站建设费用摊销年限
  • 制作个人网站要多少钱重庆工程信息官网
  • 那里建设网站好珠海网站建设公司哪个好
  • 从化市营销型网站建设工业和信息化部五系网站建设
  • 网站建设的开发方法有哪些wordpress 企业站主题
  • 长治网站建设案例找人做一个小网站需要多少钱
  • html5 网站布局应用教程韩雪冬 网站
  • 行业网站维护印刷公司网站模板
  • 做自媒体需要用的网站wordpress更换语言包
  • 电子书推送网站怎么做重庆产品网站推广
  • 免费做课设的网站织梦本地安装网站
  • 龙岗做网站公司szaow品牌网站建设公司哪好
  • 设计网站项目描述怎么样下载网页上的视频
  • 比较开放的浏览器清远网站seo
  • 个人网站的域名注册怎么做手机app软件开发
  • 卡盟网站开发google play三件套
  • 缠绕机东莞网站建设技术支持在线协同办公软件
  • 邵阳做网站哪个公司好接推广网站
  • 媒体网站模版网站添加提醒
  • 平度网站建设公司电话制作动画网站模板
  • 教育手机网站开发郑州网站修改建设
  • 查询网站入口长春网站排名推广
  • 中国建设工程造价网站丰润网站建设
  • 电子项目外包网站可以发描文本的网站
  • 论文中引用网站中wordpress外汇行情
  • 宁城网站建设磁力宝
  • 找人做彩票网站多少钱茶叶网站flash模板
  • 海口制作网站企业深圳网站建设seo推广优化
  • 东莞建设质监网站建设网站方式有哪些