ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE
1|0前言
这是一篇纯技术干货的分享文章,FreeSql 已经基本完成 .NETCore 最方便的 ORM 使命,我们正在筹备生态的建立,比如 ABP 中如何使用 FreeSql 的实现,需要各种各样的扩展包,好多好多工作量。有没有大神愿意无偿参与做这件事情,好吧。。应该没有人!!
大约是在三天前,因为使用 FreeSql 的某项目需要做一个简单的后台功能,以便录入或管理数据。在实施的过程中好怀念当初 dotnetGen 生成器的味道,用它产生 curd 基本功能几乎是秒做;
然后今天发表的 FreeSql.AdminLTE 主角,已经实现了相关功能,它是怎么干这个事情的,且看下面内容;
2|0功能介绍
它是 FreeSql 衍生出来的 .NETCore MVC 中间件扩展包,基于 AdminLTE 前端框架动态产生实体的增删查改界面;
输入:实体1、实体2、实体3
输出:后台管理的功能
只需要传入实体,就可以形成 curd 的管理功能,是不是有些骚啊~~~
先发一张运行后的图片尝个鲜:
这是根据实体产生 curd 界面的 mvc 中间件,开发时预览数据好方便啊。看完预览图不由得再感叹一次 FreeSql 的易用性,那句口号:做 .NETCore 最方便的 ORM! 没有说错。。。作者多次提及:“我们是日式简约风格,没那么复杂的用法”,也验证了这一点。。
2|1添加/修改
中件间产生的界面包括添加、修改数据的功能,普通实体的根据属性的类型与 Html5 UI 一一映射;
比较特殊的映射规则:
c# 类型 | Html5 |
---|---|
布尔 | 复选框 |
枚举 | 下拉选择 |
日期 | 日期控件 |
ManyToOne 导航属性 | 下拉选择 |
ManyToMany 导航属性 | 多选器 |
等等。。。
什么情况会产生【上传文件】控件?
有兴趣的可以了解源码,目前没有开放在外部配置。
2|2查询/过滤
中件间为每个实体提供了分页列表查询,每页为20条数据;
除此外,还提供了过滤条件的支持,规则是根据导航属性(ManyToOne、ManyToMany)。比如【文章实体】,内含有【分类id】+【分类对象】,则【文章】列表页会出现按【分类】筛选的UI,详见上面的 demo 示意图,或者下载对应的 demo 版本运行;
2|3删除
中件间为每个实体提供了批量删除的功能;
3|0测试 demo
我们习惯用 sqlite 做测试库,测试完毕直接删除目录,不留垃圾数据,所以下面的 demo 不需要修改任何地方,运行时自动建库、建表;
提供 .net core 2.1、2.2 两种环境的测试 demo 下载:
Demo for dotnet 2.1.zip、Demo for dotnet 2.2.zip
第一步:
dotnet restore
第二步:
dotnet run
4|0思考
一番惊喜过后,你应该会考虑实用性,这样做有什么价值,可用于什么样的场景?
这个扩展包简单的输入,产生巨量的功能反馈。目前来说它是死板的,对外提供的扩展性几乎为零,这样也就限定了它的应用场景。
4|1不合适的场景
1、它不可替代我们自身开发的后台管理系统;
2、它不适合摆放在公网正式环境,存在数据安全问题;
3、欢迎补充。。。;
4|2谈谈定位
目前的定位是这样的,在开发环境中使用,查阅预览实体数据,同时也比较方便的管理测试数据。
一段拥有无比力量的小段代码,也是中间件界面的功能开启:
5|0其他
本次测试的实体有 versionRow 字段(乐观锁),当不修改内容时,点按钮后不会执行SQL。
如何判定?可以回到列表,看 versionRow 的值没变化,如果执行了SQL,它的值会增加。
不执行 SQL 有啥单独可说的?这就牵连到 FreeSql.DbContext 了,是它过滤了执行操作,有兴趣可移步了解;
5|1乐观锁
FreeSql (乐观锁)说明:
更新整个实体数据时,在并发情况下极容易造成旧数据将新的记录更新。
行级锁的原理,是利用实体某字段,如:long version,更新前先查询数据,此时 version 为 1,更新时产生的 SQL 会附加 where version = 1,当修改失败时(即 Affrows == 0)抛出异常。
每个实体只支持一个行级锁属性,在属性前标记特性:[Column(IsVersion = true)] 即可。
适用 SetSource 更新,每次更新 version 的值都会增加 1
6|0收官
FreeSql.AdminLTE 目前已经定版了,差不多已经把 dotnetGen 支持的功能都迁移了过来,完成了它应有的职责定位。
下一个扩展包也非常有意思,欢迎持续关注我们,做 .NETCore 最方便的 ORM !
QQ群:4336577(已满)、8578575(在线)、52508226(在线)
github:
https://github.com/2881099/FreeSql
https://github.com/2881099/FreeSql.AdminLTE
__EOF__

本文链接:https://www.cnblogs.com/kellynic/p/10731047.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库