登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性 ...
在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
[ 复制链接 ]
高清宁
2025-6-2 22:05:28
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
我在前面随笔中介绍了在SqlSugar的开发框架中实现EAV模型(实体-属性-值)的处理,这个EAV模型实现的目的是支持弹性化的数据库设计,可以自由扩展数据库表字段和数据的查询和存储,实现的思路是在常规关系数据库中存储实体-属性-值的信息,而在非关系型数据库MongoDB数据库中存储自由字段的数据表集合,之前我们实现了在Winform界面端中对本地数据库和MongoDB数据库的处理操作,本篇随笔基于SqlSugar的开发框架的Web API实现过程,介绍对低代码EAV模型(实体-属性-值)的WebAPI实现支持。
1、SqlSugar开发框架的设计思路
SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面。
SqlSugar的开发框架本身设计是支持多终端的接入的,支持Winform、WPF、Vue3+ElementPlus、H5的APP应用等多终端的接入的,而Winform、WPF由于运行在客户端的,因此可以自由切换基于本地数据库还是Web API的服务接入,界面呈现效果一致。
对于数据的访问,我们设计开关变量模式来自由切换本地数据库模式或Web API的访问方式。如下所示。
2、EAV模型的设计思路
EAV模型(实体-属性-值)的处理,主要是用来解决动态定义业务表和数据存储和查询的解决方案,我们可以通过动态定义表和字段信息的方式,实现低代码甚至零代码的设计方案。
对于业务表,我们在系统中利用界面动态定义信息即可。如下面是产品信息表的定义界面,定义表和字段的相关信息即可。
然后通过配置菜单入口,给出了一个常规的数据录入管理界面,如下所示。
上面的字段录入,支持文本、数值、字典选择、单选框、复选框、日期、系统表选择(包括用户、角色、机构、定义表)、附件列表等内容的录入,基本覆盖了常规的需求,特殊需求进行一定的定制化处理即可。
而对于有些业务的主从表处理,如订单和订单明细,也可以通过配置的方式实现界面的自动处理。
动态化的数据,查询是其中一个难题,EAV模型(实体-属性-值)他的数据是根据不同的类型进行定义的,不会把所有的内容放在字符型的里面存储,因此保留了字段的原生类型,写入到MongoDB的非关系型数据库中,可以很好的支持各种复杂的查询处理。
由于我们的表字段是动态化构建的,因此查询字段就也就需要动态化了,我们把查询字段通过列表选择的方式,条件根据不同的数据类型,创建不同的输入控件来实现查询处理。
或者
通过下拉列表的方式选择不同的字段进行查询,如果是数值型或者日期,我们可以根据不同类型来创建输入控件组,来实现区间数值或者日期的输入。
有时候,为了方便,还提供了一个自定义条件查询的处理功能,可以自由组合多个条件进行数据的查询过滤。
我们参考了magento的eav模型设计图,对不同数据类型的内容进行了独立的存储。
由于实体类型(表定义)、实体字段属性、实体记录、字段复制映射关系、属性操作日志、删除日志等表联合构成了一个完整的裸条,如下所示。
如果我们MongoDB的数据记录移除了,还可以根据关系表的记录和属性值信息,进行MongoDB数据的同步记录处理,这样就可以还原MongoDB的数据记录了,如下所示。
3、基于WebAPI的支持实现
在SqlSugar开发框架中,我们是以接口来串起来整个应用的架构的,并且我们通过泛型基类的封装和集成,极大的减少常规代码的编写。
我们只需要在基类函数里面定义好相关的标准处理:如增、删、改、查、分页、导入、导出、排序等通用接口,以及针对不同业务模块,提供一个接口的扩展和实现即可,如下设计图所示。
一个良好的产品,可能往往需要支持多种数据库的接入,根据实际业务的需要进行调整,有时候可能需要2到3种数据库的支持。
SQLSugar的表和字段信息,都是通过特性描述的方式定义的,它们在不同的数据库是通用的,而我们要做的就是在启动的时候,加载不同的数据库连接字符串,进行初始化即可
而对应Web API的代理调用类,那么为了极大的重用常规的接口处理,我们需要类似的继承关系。
对于BS的前端和移动端,我们根据框架后端的接口进行前端JS端的类的封装处理,引入了ES6类的概念实现业务基类接口的统一封装,简化代码。
这样不管对于终端的调用(Vue3的TS客户端、WInform端、WPF端、Python前端后端)都是以一定的基类抽象的方式,尽可能的封装相同逻辑接口的实现,通过泛型类的引入,可以非常弹性化接口的实现处理。
我们根据接口的定义,分别实现WebAPI的控制器实现部分,以及ApiCaller的客户端调用的封装处理部分,如下所示。
Web API的部分如下所示。
Web API部分的路由是Restful的格式命名,然后根据实际的接口定义参数入口即可,如果是复杂实体对象的传递,一般用POST方式。
Web API的ApiCaller调用封装类,主要就是调用基类实现数据的调用和解析处理即可。如对于字段属性的ApiCaller的接口调用封装,如下所示。
主要就是根据Web API的路由名称和参数,以及请求方式的处理即可。
由于Winform或者WPF的调用是基于接口的处理方式,它实际的调用是根据开关变量的参数配置进行选择的。
//根据条件获取分页记录或者全部记录
var result = await BLLFactory<IAttributeService>.Instance.MongoGetList(pageDto);
var dataTable = result.Items;
if (pageDto.IsPaging)
{
this.pager1.PagerInfo.RecordCount = result.TotalCount;//记录总行数
}
复制代码
因此在Winform端或者WPF端,我们开发代码的时候,不用管它来自哪里,都是统一的模型调用处理。
以上就是我们SqlSugar开发框架的多接入方式、多端接入的实现思路,以及EAV实体属性值模式实现数据的弹性化定义以及查询、存储的处理。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
EAV
实现
WebAPI
属性
实体
相关帖子
在PySide6/PyQt6的项目中实现样式切换处理
在java中实现c#的int.TryParse方法
剑指offer-48、不使⽤加减乘除实现加法
flex里的小众元素实现方式
如何实现 vxe-tree 树组件拖拽节点后进行二次确认提示
在.NET中实现一库多租户(Single Database Multi-Tenancy)模式
vxe-gantt table 甘特图来实现多个维度视图展示,
C#AI系列(5): C#离线实现高效OCR
C语言实现单片机上的malloc函数功能
PostgreSQL数据库在Windows上实现异地自动备份指南-喂饭图文教程
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
在PySide6/PyQt6的项目中实现样式切换处理
1
332
全愉婉
2025-12-08
安全
在java中实现c#的int.TryParse方法
0
827
歇凛尾
2025-12-09
安全
剑指offer-48、不使⽤加减乘除实现加法
2
394
每捎京
2025-12-10
安全
flex里的小众元素实现方式
0
234
皇甫佳文
2025-12-10
代码
如何实现 vxe-tree 树组件拖拽节点后进行二次确认提示
0
162
啪炽
2025-12-10
业界
在.NET中实现一库多租户(Single Database Multi-Tenancy)模式
0
528
恙髡
2025-12-11
代码
vxe-gantt table 甘特图来实现多个维度视图展示,
0
131
忿惺噱
2025-12-12
业界
C#AI系列(5): C#离线实现高效OCR
0
679
郏琼芳
2025-12-13
安全
C语言实现单片机上的malloc函数功能
0
345
咒卖箴
2025-12-15
业界
PostgreSQL数据库在Windows上实现异地自动备份指南-喂饭图文教程
0
514
姥恫
2025-12-15
回复
(5)
樊涵菡
2025-10-15 00:42:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
秦晓曼
2025-10-17 04:27:56
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
蝌棚煌
2025-11-20 09:25:19
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
裆趾针
2025-11-26 17:42:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
涣爹卮
5 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
高清宁
5 天前
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
246
RSA加密
316
pydash原型链污染
176
大模型榜单周报(2025/12/08—2025/12/12)
849
当你不再迷信“最强模型”,系统设计才刚刚
876
软件i2c
301
2025年专业起名老师联系方式汇总:全国资深
652
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
838
JSAPIThree 加载 3D Tiles 学习笔记:大规
358
LLM 工具调用的范式演进与认知模型集成
355
Requirements Engineering with AI for Con
343
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
947
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
241
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型