非常贴心的轮子 FreeSql
FreeSql 项目从2018年11月28日开发至今,版本已发布至 v0.3.12,版本规则:年数-月-日-当日版本号。目前主要包括 FreeSql、FreeSql.Repository 两个项目的维护和开发。这篇文章介绍有哪些贴心功能。
错误:传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
不知道其他 orm 批量添加实体到 sqlserver 有没有这个错误,FreeSql 不存在。
1|0实体类配置
每款 orm 都会有自己一套实体类配置方法,当项目的实体被多个 orm 同时使用时将成为问题,因为不可能做多套配置,FreeSql 提供了以下几种的方法,免入侵式配置;
1、如果你从数据库生成的实体,FreeSql 提供 IsConfigEntityFromDbFirst 参数,可从数据库导入主键、自键等配置信息;
2、如果你已经使用 EF 建好了实体模式,FreeSql 提供了从 EF 元数据导入;
3、如果你使用了其他 orm,FreeSql 提供 ConfigEntity,使用类似 2 的做法来完成配置导入;
2|0事务
FreeSql 提供了同线程事务、对外开放事务。
2|1同线程事务
假设用户购买了价值100元的商品:
第一步:扣余额;
第二步:扣库存;
第一步成功了,到了第二步发现库存不足时,事务可以回滚,扣余额的数据将不生效。
注意与说明:
1、数据库事务在线程挂载,每个线程只可开启一个事务连接,重复开启会获取线程已开启的事务;
2、在事务代码过程中,不可使用异步方法,包括FreeSql提供的数据库异步方法,否则线程将会切换事务不生效;
3、orm.Transaction 有防止死锁机制,60秒事务未结束的,将会被其他线程强行提交(不是回滚),可能造成不完整的事务,但仔细一想60秒还没完成的事务是什么原因呢?如果嫌60秒太少了可以在重载方法的参数中设置;
2|2指定事务对象
除了上面提供的同线程事务外,FreeSql 还提供了指定事务对象的方法,将事务对象暴露给外部;
ISelect、IInsert、IUpdate、IDelete,都支持 WithTransaction 方法。
3|0仓储Repository
dotnet add package FreeSql.Repository
1、IFreeSql 的扩展方法;
2、继承现实;
3、Autofac 注入;
Autofac 注入方式实现了全局【过滤与验证】的设定,方便租户功能的设计;
4|0表达式函数
In查询
查找今天创建的数据
不提供 SqlFunc 之类的伪函数,所支持的类型基本都可以使用对应的表达式函数,例如 日期、字符串、IN查询、数组(PostgreSQL的数组)、字典(PostgreSQL HStore)等等。
5|0安全性
1、避免死锁的事务,超时自动提交;
2、未设置条件的删除、更新不生效;
3、仓储提供 filter 验证数据,确保数据的安全性;
......
6|0更多特性可前往 wiki 中心查看
github: https://github.com/2881099/FreeSql
wiki: https://github.com/2881099/FreeSql/wiki/
__EOF__

本文链接:https://www.cnblogs.com/kellynic/p/10512734.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 打造主流大模型对话的一站式集成库