gpt4 book ai didi

WTM的项目中EFCore如何适配人大金仓数据库

转载 作者:撒哈拉 更新时间:2024-07-08 13:00:14 58 4
gpt4 key购买 nike

一、WTM是什么 。

WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。 2017年9月,将代码移植到了.Net Core上,并进行了深度优化和重构,推出了基于Asp.net Core和EF Core的全新框架,新框架在架构,稳定性,速度上都有长足进步,真正成为一款高效开发的利器。 经历了四年间数十个项目的考验,框架逐步的完善,推出了四个主要版本。 WTM框架设计的核心理念就是”尽一切可能提高开发效率“。 WTM框架把常规编码结构化,重复编码自动化,它不仅是一个框架,它是强有力的生产力工具! 在不分离的模式下,它连通了前台UI和后台代码。你不需要前后台分离,不需要两个人配合,减少成本,缩短工期。 在前后端分离的模式下,同样可以使用代码生成器同时生成前台和后台的代码,极大的降低了前后端人员的沟通成本,从本质上提升了开发效率,让“分离”不再复杂和昂贵。 框架特点: 一键生成WTM项目 一键生成增删改查,导入导出,批量操作代码 支持一对多,多对多关联模型的识别和代码生成 支持React+AntD,Vue+Element,LayUI,Blazor等多种前端模式 支持sqlserver,mysql,pgsql,sqlite,Oracle等多种数据库 封装了Layui,AntD,Element的大部分控件,编写前台更加简便 提供了很多基类,封装了绝大部分后台常用操作 提供了用户,角色,用户组,菜单,日志等常用模块 支持数据权限的开发和配置 支持读写分离和数据库分库 。

开源地址: (GitHub) https://github.com/WalkingTec/WalkingTec.Mvvm (Gitee) https://gitee.com/liuliang-wtm/WTM 。

二、人大金仓是什么 人大金仓数据库管理系统[简称:KingbaseES]是北京人大金仓信息技术股份有限公司[简称人大金仓]的核心产品,具有大型通用、"三高"(高可靠、高性能、高安全)、"三易"(易管理、易使用、易扩展)、运行稳定等特点,是唯一入选国家自主创新产品目录的数据库产品,也是国家级、省部级实际项目中应用最广泛的国产数据库产品。 人大金仓数据库管理系统 KingbaseES(KES) 是面向全行业、全客户关键应用的企业级大型通用数据库管理系统,适用于联机事务处理、查询密集型数据仓库、要求苛刻的互联网应用等场景,提供全部应用开发及系统管理功能,提供性能增强特性,可支持主备集群、读写分离集群、多活共享存储集群等全集群架构,具有高性能、高安全、高可用、易使用、易管理、易维护的特点,支持所有国内外主流CPU、操作系统与云平台部署。 下载试用地址: https://www.kingbase.com.cn/xzzx/index.htm 可在下载页面申请开发试用授权文件,授权时间365天。 安装过程比较简单,唯一需要注意的就是在安装过程中可以选择数据库兼容类型,这里选择的是UTF8字符集,兼容MySql,大小写不敏感.

  。

三、迁移注意事项 。

项目用的是.NET6框架,在项目里引用(或者NuGet安装)人大金仓官方的EFCore的Kdbndp驱动Kdbndp.EntityFrameworkCore6.KingbaseES.

1、工作流使用的数据库所属模式手动创建 。

WTM集成了Elsa的工作流,在迁移的过程中需要把Elsa所需要的几个表迁移到特定的模式下面,否则运行会提示找不到Elsa.xxxx的错误提示; 。

模式右键-->新建-->Elsa,然后把所需要的这几个表迁移到它下面.

2、字段类型转换 。

绝大部分的Mysql字段可以无缝迁移到人大金仓,对于mysql的bool类型的字段需要特别关注一下,会迁移成bit或者int类型,需要手动调整成人大金仓的bool类型; 。

mysql的datetime类型,迁移到人大金仓后对应的类型是timestamp。这个需要在DataContext的OnConfiguring中指定一下参数,否则会报以下错误:

System.InvalidCastException: Cannot write DateTime with Kind=Local to PostgreSQL type 'timestamp with time zone', only UTC is supported. Note that it's not possible to mix DateTimes with different Kinds in an array/range. See the Npgsql.EnableLegacyTimestampBehavior AppContext switch to enable legacy behavior. 。

具体参考:https://www.npgsql.org/doc/types/datetime.html#timestamps-and-timezones 。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
		{
			if (DBType == DBTypeEnum.PgSql)
			{
				AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
				AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
			}
			base.OnConfiguring(optionsBuilder);
		}

2、自增字段实现 。

在mysql、sqlserver等数据库中,只要把字段设置为int,然后打开自增选项后,字段就会实现自增功能。在人大金仓中,默认没有这种字段类型,官网中称这种为序数类型,类似于Oracle的SEQUENCE:

smallserial、serial 和 bigserial类型不是真正的类型, 它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的 AUTO_INCREMENT 属性)。 这是 KingbaseES 特有的创建一个自增列的方法.

因为 smallserial、serial 和 bigserial 是用序列实现的,所以即使没有删除过行,在出现在列中的序列值可能有“空洞”或者间隙。如果一个从序列中分配的值被用在一行中,即使该行最终没有被成功地插入到表中,该值也被“用掉”了。例如,当插入事务回滚时就会发生这种情况。更多信息参见序列操作函数中的 nextval().

在人大金仓中需要通过序列类型实现字段自增的方式,需要我们在数据库的Public模式下的序列中,创建一个序列(这里设置的最大值为bigint的最大值附近,具体可自己决定):

  。

随后,在需要自增的字段,给它的默认值设置为 nextval('USER_SEQUENCE'::regclass)  ,这样在每次insert数据的时候,这个字段会自动从序列中获取最新的值来填充(不需要代码中进行赋值).

至此就基本完成了mysql到人大金仓的数据库迁移.

最后此篇关于WTM的项目中EFCore如何适配人大金仓数据库的文章就讲到这里了,如果你想了解更多关于WTM的项目中EFCore如何适配人大金仓数据库的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com